Files
finger_print_app/lib/data/repositories/vacation_repository_impl.dart
Daniah Ayad Al-sultani 08b16df68d chnages has been made
2026-02-12 14:25:19 +03:00

150 lines
5.4 KiB
Dart

import 'package:dartz/dartz.dart';
import '../../core/error/exceptions.dart';
import '../../core/error/failures.dart';
import '../datasources/vacation_remote_data_source.dart';
import '../dto/vacation_request_dto.dart';
import '../../domain/models/vacation_request.dart';
import '../../domain/models/vacation_response_model.dart';
import '../../domain/models/vacation_type_model.dart';
import '../../domain/models/vacations_list_response_model.dart';
import '../../domain/repositories/vacation_repository.dart';
class VacationRepositoryImpl implements VacationRepository {
final VacationRemoteDataSource remoteDataSource;
VacationRepositoryImpl({required this.remoteDataSource});
@override
Future<Either<Failure, VacationResponseModel>> createVacation(
VacationRequest request,
) async {
try {
final dto = VacationRequestDto(
employeeId: request.employeeId,
startDate: request.startDate,
endDate: request.endDate,
reason: request.reason,
type: request.type,
);
final responseDto = await remoteDataSource.createVacation(dto);
// Convert DTO to Model
final responseModel = VacationResponseModel(
statusCode: responseDto.statusCode,
isSuccess: responseDto.isSuccess,
message: responseDto.message,
data:
responseDto.data != null
? VacationDataModel(
employeeId: responseDto.data!.employeeId,
employeeFullName: responseDto.data!.employeeFullName,
startDate: responseDto.data!.startDate,
endDate: responseDto.data!.endDate,
reason: responseDto.data!.reason,
submittedBy: responseDto.data!.submittedBy,
submittedByUser: responseDto.data!.submittedByUser,
state: responseDto.data!.state,
type: responseDto.data!.type,
id: responseDto.data!.id,
createdAt: responseDto.data!.createdAt,
updatedAt: responseDto.data!.updatedAt,
deletedAt: responseDto.data!.deletedAt,
isDeleted: responseDto.data!.isDeleted,
)
: null,
);
return Right(responseModel);
} on ServerException catch (e) {
return Left(ServerFailure(e.message));
} on NetworkException catch (e) {
return Left(NetworkFailure(e.message));
} catch (e) {
return Left(ServerFailure('خطأ غير متوقع: $e'));
}
}
@override
Future<Either<Failure, VacationTypesResponseModel>> getVacationTypes() async {
try {
final responseDto = await remoteDataSource.getVacationTypes();
// Convert DTO to Model
final responseModel = VacationTypesResponseModel(
statusCode: responseDto.statusCode,
isSuccess: responseDto.isSuccess,
message: responseDto.message,
data:
responseDto.data
.map(
(dto) => VacationTypeModel(value: dto.value, name: dto.name),
)
.toList(),
);
return Right(responseModel);
} on ServerException catch (e) {
return Left(ServerFailure(e.message));
} on NetworkException catch (e) {
return Left(NetworkFailure(e.message));
} catch (e) {
return Left(ServerFailure('خطأ غير متوقع: $e'));
}
}
@override
Future<Either<Failure, VacationsListResponseModel>> getVacations(
String employeeId,
) async {
try {
final responseDto = await remoteDataSource.getVacations(employeeId);
// Convert DTO to Model
final responseModel = VacationsListResponseModel(
statusCode: responseDto.statusCode,
isSuccess: responseDto.isSuccess,
message: responseDto.message,
data:
responseDto.data != null
? VacationsListDataModel(
items:
responseDto.data!.items
.map(
(dto) => VacationDataModel(
employeeId: dto.employeeId,
employeeFullName: dto.employeeFullName,
startDate: dto.startDate,
endDate: dto.endDate,
reason: dto.reason,
submittedBy: dto.submittedBy,
submittedByUser: dto.submittedByUser,
state: dto.state,
type: dto.type,
id: dto.id,
createdAt: dto.createdAt,
updatedAt: dto.updatedAt,
deletedAt: dto.deletedAt,
isDeleted: dto.isDeleted,
),
)
.toList(),
pageNumber: responseDto.data!.pageNumber,
pageSize: responseDto.data!.pageSize,
totalCount: responseDto.data!.totalCount,
totalPages: responseDto.data!.totalPages,
)
: null,
);
return Right(responseModel);
} on ServerException catch (e) {
return Left(ServerFailure(e.message));
} on NetworkException catch (e) {
return Left(NetworkFailure(e.message));
} catch (e) {
return Left(ServerFailure('خطأ غير متوقع: $e'));
}
}
}