mnemo_cards/mnemo_cards_backend/lib/statistics/session_tracking_middleware.dart
2025-11-16 14:25:27 +03:00

33 lines
1.3 KiB
Dart

import 'package:mnemo_cards_backend/api/authorize/helpers.dart';
import 'package:mnemo_cards_backend/statistics/session_tracker.dart';
import 'package:shelf/shelf.dart';
/// Middleware for tracking user study sessions based on API activity
///
/// This middleware automatically updates user sessions when they make authenticated
/// API requests, ensuring session tracking covers all user activities beyond just tests.
Middleware sessionTrackingMiddleware(SessionTracker sessionTracker) {
return (Handler inner) {
return (Request request) async {
final user = request.user;
// Only track sessions for authenticated users
if (user != null && user.id != null) {
try {
// Get or create session for this user
// We don't specify packId or testId here since this is general activity tracking
await sessionTracker.getOrCreateSession(user.id!);
// Note: We don't update progress here since we don't know what the user is doing
// Progress updates happen in specific handlers (like test completion)
} catch (e) {
// Log error but don't fail the request - session tracking is not critical
print('Session tracking middleware error: $e');
}
}
// Continue with the request
return await inner(request);
};
};
}