// ignore_for_file: prefer_single_quotes import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:tm_app/core/utils/logger.dart'; import 'package:tm_app/data/services/api/auth_api.dart'; import 'package:tm_app/data/services/model/forgot_password_response/forgot_password_response_model.dart'; import 'package:tm_app/data/services/model/login_response/login_response_model.dart'; import 'package:tm_app/data/services/model/logout_response/logout_response.dart'; import 'package:tm_app/data/services/model/verify_otp_response/verify_otp_response_model.dart'; import '../../core/network/network_manager.dart'; import '../../core/utils/result.dart'; class AuthService { AuthService({required NetworkManager networkManager}) : _networkManager = networkManager; final NetworkManager _networkManager; Future> login({ required String username, required String password, }) async { var data = jsonEncode({"password": password, "username": username}); final result = await _networkManager.makeRequest( AuthApi.login, method: 'POST', (json) => LoginResponseModel.fromJson(json), data: data, ); if (result is Ok) { final prefs = await SharedPreferences.getInstance(); final token = result.value.data.accessToken; final refreshToken = result.value.data.refreshToken; await prefs.setString('bearer', token!); await prefs.setString('refresh_token', refreshToken!); } return result; } Future> logout() async { final result = await _networkManager.makeRequest( AuthApi.logout, method: 'DELETE', (json) => LogoutResponse.fromJson(json), ); return result; } Future localLogout() async { final prefs = await SharedPreferences.getInstance(); await prefs.remove('bearer'); await prefs.remove('refresh_token'); appLogger.info('tokens cleared!'); } Future> forgotPassword({ required String email, }) async { final data = jsonEncode({"email": email}); final result = await _networkManager.makeRequest( AuthApi.forgotPassword, method: 'POST', (json) => ForgotPasswordResponseModel.fromJson(json), data: data, ); return result; } Future> verifyOtp({ required String code, required String email, }) async { final data = jsonEncode({"code": code, "email": email}); final result = await _networkManager.makeRequest( "/api/v1/profile/verify-otp", method: 'POST', (json) => VerifyOtpResponseModel.fromJson(json), data: data, ); return result; } }