76 lines
2.2 KiB
Dart
76 lines
2.2 KiB
Dart
// 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 '../../core/network/network_manager.dart';
|
|
import '../../core/utils/result.dart';
|
|
|
|
class AuthService {
|
|
AuthService({required NetworkManager networkManager})
|
|
: _networkManager = networkManager;
|
|
|
|
final NetworkManager _networkManager;
|
|
|
|
Future<Result<LoginResponseModel>> 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<LoginResponseModel>) {
|
|
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<Result<LogoutResponse>> logout() async {
|
|
final result = await _networkManager.makeRequest(
|
|
AuthApi.logout,
|
|
method: 'DELETE',
|
|
(json) => LogoutResponse.fromJson(json),
|
|
);
|
|
return result;
|
|
}
|
|
|
|
Future<void> localLogout() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.remove('bearer');
|
|
await prefs.remove('refresh_token');
|
|
appLogger.info('tokens cleared!');
|
|
}
|
|
|
|
Future<Result<ForgotPasswordResponseModel>> 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;
|
|
}
|
|
}
|