33 lines
1.3 KiB
Dart
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);
|
|
};
|
|
};
|
|
}
|