import 'package:food_delivery_client/core/services/request_handler_service.dart'; import 'package:food_delivery_client/feature/auth/data/models/response/login_response.dart'; import 'package:food_delivery_client/feature/auth/domain/usecases/register_usecase.dart'; import 'package:food_delivery_client/feature/auth/domain/usecases/reset_password_usecase.dart'; import 'package:food_delivery_client/feature/auth/domain/usecases/verify_otp_code_login_usecase.dart'; import 'package:food_delivery_client/feature/auth/domain/usecases/verify_phone_login_usecase.dart'; import 'package:food_delivery_client/food_delivery_client.dart'; abstract class AuthDatasource { Future login({ required String phoneNumber, required String password, }); Future verifyPhoneResetPassword({ required VerifyPhoneNumberParams params, }); Future verifyOtpCodeResetPassword({ required VerifyOtpCodeParams params, }); Future resetPassword({required ResetPasswordParams params}); Future verifyPhoneRegister({ required VerifyPhoneNumberParams params, }); Future verifyOtpCodeRegister({ required VerifyOtpCodeParams params, }); Future register({required RegisterParams params}); } @LazySingleton(as: AuthDatasource) class AuthDatasourceImpl implements AuthDatasource { final RequestHandlerService _requestHandlerService; AuthDatasourceImpl(this._requestHandlerService); @override Future login({ required String phoneNumber, required String password, }) async { return _requestHandlerService.handleRequest( path: ApiConst.login, method: RequestMethodEnum.post, data: {"password": password, "phoneNumber": phoneNumber}, fromJson: (response) async => LoginResponseModel.fromJson(response.data), ); } @override Future register({required RegisterParams params}) async { return _requestHandlerService.handleRequest( path: ApiConst.register, method: RequestMethodEnum.post, data: { "firstName": params.firstName, "lastName": params.lastName, "password": params.password, "phoneNumber": params.phoneNumber, }, fromJson: (response) async { return SuccessModel.fromJson(response.data); }, ); } @override Future resetPassword({ required ResetPasswordParams params, }) async { return _requestHandlerService.handleRequest( path: ApiConst.resetPassword, method: RequestMethodEnum.post, data: { "newPassword": params.newPassword, "phoneNumber": params.phoneNumber, }, fromJson: (response) async => SuccessModel.fromJson(response.data), ); } @override Future verifyOtpCodeRegister({ required VerifyOtpCodeParams params, }) async { return _requestHandlerService.handleRequest( path: ApiConst.verifyCode, method: RequestMethodEnum.post, data: {"code": params.otpCode, "phoneNumber": params.phoneNumber}, fromJson: (response) async => SuccessModel.fromJson(response.data), ); } @override Future verifyOtpCodeResetPassword({ required VerifyOtpCodeParams params, }) async { return _requestHandlerService.handleRequest( path: ApiConst.forgotPassword, method: RequestMethodEnum.post, data: {"code": params.otpCode, "phoneNumber": params.phoneNumber}, fromJson: (response) async => SuccessModel.fromJson(response.data), ); } @override Future verifyPhoneRegister({ required VerifyPhoneNumberParams params, }) async { return _requestHandlerService.handleRequest( path: ApiConst.verifyPhone, method: RequestMethodEnum.post, data: {"phoneNumber": params.phoneNumber}, fromJson: (response) async => SuccessModel.fromJson(response.data), ); } @override Future verifyPhoneResetPassword({ required VerifyPhoneNumberParams params, }) async { return _requestHandlerService.handleRequest( path: ApiConst.sendCode, method: RequestMethodEnum.post, data: {"phoneNumber": params.phoneNumber}, fromJson: (response) async => SuccessModel.fromJson(response.data), ); } }