import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:problem_check_system/data/models/auth_model.dart'; import 'package:problem_check_system/data/models/user/user.dart'; import 'package:problem_check_system/data/providers/connectivity_provider.dart'; import 'package:problem_check_system/data/providers/http_provider.dart'; class AuthRepository extends GetxService { final HttpProvider httpProvider; final GetStorage storage; final ConnectivityProvider connectivityProvider; AuthRepository({ required this.httpProvider, required this.storage, required this.connectivityProvider, }); static const String _tokenKey = 'token'; static const String _refreshTokenKey = 'refresh_token'; static const String _loginKey = 'user'; static const String _rememberMe = 'remember_me'; void saveToken(String token) { storage.write(_tokenKey, token); } String? getToken() { return storage.read(_tokenKey); } void saveRefreshToken(String refreshToken) { storage.write(_refreshTokenKey, refreshToken); } String? getRefreshToken() { return storage.read(_refreshTokenKey); } void addLoginKey(LoginRequest login) { storage.write(_loginKey, login.toJson()); } /// 登录请求 LoginRequest getLoginKey() { final loginData = storage.read(_loginKey); // 检查是否找到数据,并进行反序列化 if (loginData != null) { // 确保类型正确,然后进行反序列化 return LoginRequest.fromJson(Map.from(loginData)); } // 如果没有找到数据,返回一个默认的空对象 return LoginRequest(username: '', password: ''); } void removeLoginKey() { storage.remove(_loginKey); } void addRememberMe(bool remembered) { storage.write(_rememberMe, remembered); } bool getRememberMe() { return storage.read(_rememberMe) ?? false; } void clearAuthData() { storage.remove(_tokenKey); storage.remove(_refreshTokenKey); } // 是否在线 bool get isOnline { return connectivityProvider.isOnline.value; } /// Check if a user is currently logged in by verifying the existence of a token. bool isLoggedIn() { final token = getToken(); return token != null && token.isNotEmpty; } /// Handles the user login process by calling the API and saving the response. Future login(LoginRequest request) async { final response = await httpProvider.post( '/api/Accounts/SignIn', data: request.toJson(), ); final loginResponse = LoginResponse.fromJson(response.data); return loginResponse; } /// 从 API 获取用户个人资料 Future getUserProfile() async { final response = await httpProvider.get('/api/Accounts/Profile'); // 将 JSON 数据反序列化为 Profile 模型 return User.fromJson(response.data); } /// Refreshes the authentication token using the refresh token. Future refreshToken() async { final refreshToken = getRefreshToken(); final response = await httpProvider.post( '/auth/refresh', data: {'refresh_token': refreshToken}, ); final authResponse = LoginResponse.fromJson(response.data); saveToken(authResponse.token); saveRefreshToken(authResponse.refreshToken); return authResponse; } }