From 5870b29a9b25d95cfdbd71aa443c8d50ea125f61 Mon Sep 17 00:00:00 2001 From: sBubshait Date: Mon, 21 Jul 2025 09:54:20 +0300 Subject: [PATCH] feat: cache the user profile information for performance --- frontend/lib/services/auth_service.dart | 18 ++++++++++++++++++ frontend/lib/services/user_service.dart | 11 ++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/frontend/lib/services/auth_service.dart b/frontend/lib/services/auth_service.dart index 3711a66..c945135 100644 --- a/frontend/lib/services/auth_service.dart +++ b/frontend/lib/services/auth_service.dart @@ -6,6 +6,7 @@ import '../constants/api_constants.dart'; class AuthService { static const FlutterSecureStorage _storage = FlutterSecureStorage(); static const String _tokenKey = 'jwt_token'; + static const String _userDataKey = 'user_data'; static Future> login( String emailOrUsername, @@ -60,6 +61,7 @@ class AuthService { static Future logout() async { await _storage.delete(key: _tokenKey); + await _storage.delete(key: _userDataKey); } static Future> getAuthHeaders() async { @@ -69,4 +71,20 @@ class AuthService { if (token != null) 'Authorization': 'Bearer $token', }; } + + static Future saveUserData(Map userData) async { + await _storage.write(key: _userDataKey, value: jsonEncode(userData)); + } + + static Future?> getCachedUserData() async { + final userData = await _storage.read(key: _userDataKey); + if (userData != null) { + return jsonDecode(userData); + } + return null; + } + + static Future clearUserData() async { + await _storage.delete(key: _userDataKey); + } } diff --git a/frontend/lib/services/user_service.dart b/frontend/lib/services/user_service.dart index 0904f8d..00bde84 100644 --- a/frontend/lib/services/user_service.dart +++ b/frontend/lib/services/user_service.dart @@ -1,14 +1,23 @@ import 'dart:convert'; import '../constants/api_constants.dart'; import 'http_service.dart'; +import 'auth_service.dart'; class UserService { - static Future> getCurrentUser() async { + static Future> getCurrentUser({bool forceRefresh = false}) async { + if (!forceRefresh) { + final cachedData = await AuthService.getCachedUserData(); + if (cachedData != null) { + return {'success': true, 'data': cachedData}; + } + } + try { final response = await HttpService.get(ApiConstants.getUserEndpoint); if (response.statusCode == 200) { final data = jsonDecode(response.body); + await AuthService.saveUserData(data); return {'success': true, 'data': data}; } else if (response.statusCode == 401) { return {'success': false, 'message': 'Session expired. Please login again.'};