feat:auth datasource done

This commit is contained in:
jahongireshonqulov
2025-10-29 17:09:44 +05:00
parent 5e4d362039
commit 531e3230cc
30 changed files with 300 additions and 103 deletions

View File

@@ -1,5 +1,9 @@
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 {
@@ -7,6 +11,26 @@ abstract class AuthDatasource {
required String phoneNumber,
required String password,
});
Future<SuccessModel> verifyPhoneResetPassword({
required VerifyPhoneNumberParams params,
});
Future<SuccessModel> verifyOtpCodeResetPassword({
required VerifyOtpCodeParams params,
});
Future<SuccessModel> resetPassword({required ResetPasswordParams params});
Future<SuccessModel> verifyPhoneRegister({
required VerifyPhoneNumberParams params,
});
Future<SuccessModel> verifyOtpCodeRegister({
required VerifyOtpCodeParams params,
});
Future<SuccessModel> register({required RegisterParams params});
}
@LazySingleton(as: AuthDatasource)
@@ -27,4 +51,88 @@ class AuthDatasourceImpl implements AuthDatasource {
fromJson: (response) async => LoginResponseModel.fromJson(response.data),
);
}
@override
Future<SuccessModel> 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<SuccessModel> 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<SuccessModel> 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<SuccessModel> 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<SuccessModel> 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<SuccessModel> 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),
);
}
}

View File

@@ -0,0 +1,13 @@
class RegisterParams {
final String firstName;
final String lastName;
final String phoneNumber;
final String password;
RegisterParams({
required this.firstName,
required this.lastName,
required this.phoneNumber,
required this.password,
});
}

View File

@@ -0,0 +1,6 @@
class ResetPasswordParams {
final String newPassword;
final String phoneNumber;
ResetPasswordParams({required this.newPassword, required this.phoneNumber});
}

View File

@@ -0,0 +1,6 @@
class VerifyOtpCodeParams {
final String otpCode;
final String phoneNumber;
VerifyOtpCodeParams({required this.otpCode, required this.phoneNumber});
}

View File

@@ -0,0 +1,5 @@
class VerifyPhoneNumberParams {
final String phoneNumber;
VerifyPhoneNumberParams({required this.phoneNumber});
}

View File

@@ -33,7 +33,12 @@ class _WLoginBodyState extends State<WLoginBody> {
@override
Widget build(BuildContext context) {
return BlocBuilder<LoginBloc, LoginState>(
return BlocConsumer<LoginBloc, LoginState>(
listener: (context, state) {
if (state.status.isLoaded()) {
context.go(Routes.main);
}
},
builder: (context, state) {
return Form(
key: _formKey,
@@ -105,7 +110,7 @@ class _WLoginBodyState extends State<WLoginBody> {
alignment: AlignmentGeometry.centerRight,
child: TextButton(
onPressed: () {
context.push(Routes.verifyPhoneNumber, extra: false);
// context.push(Routes.verifyPhoneNumber, extra: false);
},
child: Text(
context.loc.forgot_password,
@@ -124,15 +129,16 @@ class _WLoginBodyState extends State<WLoginBody> {
).paddingOnly(left: 10),
onPressed: () {
if (_formKey.currentState?.validate() ?? false) {
context.read<LoginBloc>().add(
LoginEvent.login(
LoginParams(
phoneNumber:
"+998${_phoneController.text.trim().replaceAll(" ", "")}",
password: _passwordController.text.trim(),
),
),
);
context.go(Routes.main);
// context.read<LoginBloc>().add(
// LoginEvent.login(
// LoginParams(
// phoneNumber:
// "+998${_phoneController.text.trim().replaceAll(" ", "")}",
// password: _passwordController.text.trim(),
// ),
// ),
// );
}
},
borderRadius: 15,
@@ -148,10 +154,7 @@ class _WLoginBodyState extends State<WLoginBody> {
),
TextButton(
onPressed: () {
context.push(
Routes.verifyPhoneNumber,
extra: true,
);
// context.push(Routes.verifyPhoneNumber, extra: true);
},
child: Text(
context.loc.sign_up,