Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions lib/api/client/api_client.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import 'package:dio/dio.dart';
import 'package:elevate_tracking_app/api/models/requests/login_request.dart';
import 'package:elevate_tracking_app/api/models/responses/change_password_response_dto.dart';
import 'package:elevate_tracking_app/api/models/responses/login_response.dart';
import 'package:injectable/injectable.dart';
import 'package:retrofit/retrofit.dart';

import '../../core/constants/end_points.dart';
import '../models/requests/change_password_request_dto.dart';

part 'api_client.g.dart';

Expand All @@ -16,4 +18,12 @@ abstract class ApiClient {

@POST(EndPoints.login)
Future<LoginResponse> login(@Body() LoginRequest loginRequest);


@PATCH(EndPoints.changePassword)
Future<ChangePasswordResponseDto> changePassword(
@Body() ChangePasswordRequestDto body,
);


}
13 changes: 13 additions & 0 deletions lib/api/data_source/auth_remote_data_source_impl.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import 'package:elevate_tracking_app/api/client/api_client.dart';
import 'package:elevate_tracking_app/api/mapper/change_password_mapper.dart';
import 'package:elevate_tracking_app/api/mapper/login_mapper.dart';
import 'package:elevate_tracking_app/core/api_result/api_result.dart';
import 'package:elevate_tracking_app/core/api_result/safe_api_call.dart';
import 'package:elevate_tracking_app/data/data_source/auth_remote_data_source.dart';
import 'package:elevate_tracking_app/domain/entites/login_entity.dart';
import 'package:elevate_tracking_app/domain/entites/requests/login_request_entity.dart';
import 'package:injectable/injectable.dart';
import '../../domain/entites/requests/change_password_request_entity.dart';
import '../../domain/entites/response/change_password_response_entity.dart';

@Injectable(as: AuthRemoteDataSource)
class AuthRemoteDataSourceImpl implements AuthRemoteDataSource {
Expand All @@ -20,4 +23,14 @@ class AuthRemoteDataSourceImpl implements AuthRemoteDataSource {
(response) => response.toEntity(),
);
}

@override
Future<ApiResult<ChangePasswordResponseEntity>> changePassword(
ChangePasswordRequestEntity request,
) async {
return safeApiCall(
() => _apiClient.changePassword(request.fromDomain()),
(response) => response.toEntity(),
);
}
}
33 changes: 33 additions & 0 deletions lib/api/mapper/change_password_mapper.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import '../../domain/entites/requests/change_password_request_entity.dart';
import '../../domain/entites/response/change_password_response_entity.dart';
import '../models/requests/change_password_request_dto.dart';
import '../models/responses/change_password_response_dto.dart';

extension ChangePasswordMapper on ChangePasswordResponseDto{
ChangePasswordResponseEntity toEntity() {
return ChangePasswordResponseEntity(
message: message,
token: token
);
}
}

extension ChangePasswordRequestMapper on ChangePasswordRequestEntity{

ChangePasswordRequestDto fromDomain(){
return ChangePasswordRequestDto(
newPassword: newPassword,
password: password,

);
}
}

extension ChangePasswordResponseEntityMapper on ChangePasswordResponseEntity {
ChangePasswordResponseDto toDto() {
return ChangePasswordResponseDto(
message: message,
token: token,
);
}
}
26 changes: 26 additions & 0 deletions lib/api/models/requests/change_password_request_dto.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:json_annotation/json_annotation.dart';

part 'change_password_request_dto.g.dart';

@JsonSerializable()
class ChangePasswordRequestDto {
@JsonKey(name: "password")
final String? password;
@JsonKey(name: "newPassword")
final String? newPassword;

ChangePasswordRequestDto ({
this.password,
this.newPassword,
});

factory ChangePasswordRequestDto.fromJson(Map<String, dynamic> json) {
return _$ChangePasswordRequestDtoFromJson(json);
}

Map<String, dynamic> toJson() {
return _$ChangePasswordRequestDtoToJson(this);
}
}


26 changes: 26 additions & 0 deletions lib/api/models/responses/change_password_response_dto.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:json_annotation/json_annotation.dart';

part 'change_password_response_dto.g.dart';

@JsonSerializable()
class ChangePasswordResponseDto {
@JsonKey(name: "message")
final String? message;
@JsonKey(name: "token")
final String? token;

ChangePasswordResponseDto ({
this.message,
this.token,
});

factory ChangePasswordResponseDto.fromJson(Map<String, dynamic> json) {
return _$ChangePasswordResponseDtoFromJson(json);
}

Map<String, dynamic> toJson() {
return _$ChangePasswordResponseDtoToJson(this);
}
}


1 change: 1 addition & 0 deletions lib/core/constants/end_points.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
abstract class EndPoints {
static const login = "api/v1/drivers/signin";
static const changePassword = "api/v1/drivers/change-password";
}
9 changes: 9 additions & 0 deletions lib/core/constants/widgets_keys.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,13 @@ abstract final class WidgetsKeys {
"login_screen_forgot_password_button";
static const String kLoginScreenContinueButton =
"login_screen_continue_button";
static const String kChanePasswordPassword =
"change_password_password";
static const String kChanePasswordConfirmPassword =
"change_password_confirm_password";
static const String kChanePasswordNewPassword =
"change_password_new_password";
static const String kChanePasswordConfirmButton =
"change_password_confirm_button";

}
8 changes: 7 additions & 1 deletion lib/core/router/app_router.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:elevate_tracking_app/core/router/route_names.dart';
import 'package:elevate_tracking_app/presentation/application_approved/views/screen/application_approved_screen.dart';
import 'package:elevate_tracking_app/presentation/auth/change_password/view/change_password_view.dart';
import 'package:elevate_tracking_app/presentation/home/views/screen/home_screen.dart';
import 'package:elevate_tracking_app/presentation/main_home/views/screen/main_home_screen.dart';
import 'package:elevate_tracking_app/presentation/onboarding/views/screen/onboarding_screen.dart';
Expand Down Expand Up @@ -39,11 +40,16 @@ abstract class AppRouter {
builder: (context, state) => const ProfileScreen(),
),

GoRoute(
path: RouteNames.changePassword,
builder: (context, state) => const ChangePassword(),
),

];

static GoRouter router(String? token) {
return GoRouter(
initialLocation: token == null ? RouteNames.onboarding : RouteNames.home,
initialLocation: token == null ? RouteNames.login: RouteNames.login,
routes: routes,
);
}
Expand Down
7 changes: 7 additions & 0 deletions lib/data/data_source/auth_remote_data_source.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import '../../core/api_result/api_result.dart';
import '../../domain/entites/login_entity.dart';
import '../../domain/entites/requests/change_password_request_entity.dart';
import '../../domain/entites/requests/login_request_entity.dart';
import '../../domain/entites/response/change_password_response_entity.dart';

abstract interface class AuthRemoteDataSource {
Future<ApiResult<LoginEntity>> login(LoginRequestEntity loginRequestEntity);

Future<ApiResult<ChangePasswordResponseEntity>> changePassword(
ChangePasswordRequestEntity request,
);

}
11 changes: 11 additions & 0 deletions lib/data/repo/auth_repo_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import 'package:elevate_tracking_app/domain/entites/requests/login_request_entit
import 'package:elevate_tracking_app/domain/repo/auth_repo.dart';
import 'package:injectable/injectable.dart';

import '../../domain/entites/requests/change_password_request_entity.dart';
import '../../domain/entites/response/change_password_response_entity.dart';
import '../data_source/auth_local_data_source.dart';
import '../data_source/auth_remote_data_source.dart';

Expand Down Expand Up @@ -34,4 +36,13 @@ class AuthRepoImpl implements AuthRepo {
}
return result;
}

@override
Future<ApiResult<ChangePasswordResponseEntity>> changePassword(
ChangePasswordRequestEntity request,
) {
return _authRemoteDataSource.changePassword(request);
}


}
15 changes: 15 additions & 0 deletions lib/domain/entites/requests/change_password_request_entity.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@


class ChangePasswordRequestEntity {
final String? password;
final String? newPassword;

ChangePasswordRequestEntity ({
this.password,
this.newPassword,
});


}


15 changes: 15 additions & 0 deletions lib/domain/entites/response/change_password_response_entity.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@


class ChangePasswordResponseEntity {
final String? message;
final String? token;

ChangePasswordResponseEntity ({
this.message,
this.token,
});


}


7 changes: 7 additions & 0 deletions lib/domain/repo/auth_repo.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@ import 'package:elevate_tracking_app/core/api_result/api_result.dart';
import 'package:elevate_tracking_app/domain/entites/login_entity.dart';
import 'package:elevate_tracking_app/domain/entites/requests/login_request_entity.dart';

import '../entites/requests/change_password_request_entity.dart';
import '../entites/response/change_password_response_entity.dart';

abstract interface class AuthRepo {
Future<ApiResult<LoginEntity>> login(LoginRequestEntity loginRequestEntity);

Future<ApiResult<ChangePasswordResponseEntity>> changePassword(
ChangePasswordRequestEntity request,
);
}
18 changes: 18 additions & 0 deletions lib/domain/use_cases/change_password_use_case.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import 'package:elevate_tracking_app/domain/entites/response/change_password_response_entity.dart';
import 'package:elevate_tracking_app/domain/repo/auth_repo.dart';
import 'package:injectable/injectable.dart';
import '../../core/api_result/api_result.dart';
import '../entites/requests/change_password_request_entity.dart';

@injectable
class ChangePasswordUseCase {
final AuthRepo _authRepo;

ChangePasswordUseCase(this._authRepo);

Future<ApiResult<ChangePasswordResponseEntity>> call(
ChangePasswordRequestEntity changePasswordEntity,
) async {
return await _authRepo.changePassword(changePasswordEntity);
}
}
8 changes: 7 additions & 1 deletion lib/l10n/intl_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,11 @@
"enterYourEmail": "Enter your email",
"enterYourPassword": "Enter your password",
"continueWord": "Continue",
"error": "Error"
"error": "Error",
"success": "success",
"resetPassword": "Reset Password",
"currentPassword": "Current password",
"newPassword": "New password",
"confirmPassword": "Confirm password",
"confirm": "Confirm"
}
Loading
Loading