96 lines
3.2 KiB
Dart
96 lines
3.2 KiB
Dart
import 'package:dartz/dartz.dart';
|
|
import 'package:injectable/injectable.dart';
|
|
import '../../core/errors/failures.dart';
|
|
import '../../core/errors/exceptions.dart';
|
|
import '../../domain/repositories/equipment_repository.dart';
|
|
import '../datasources/remote/equipment_remote_datasource.dart';
|
|
import '../models/equipment/equipment_dto.dart';
|
|
import '../models/common/paginated_response.dart';
|
|
|
|
/// 장비 관리 Repository 구현체
|
|
/// 장비 정보 CRUD 작업을 처리하며 도메인 모델과 API DTO 간 변환을 담당
|
|
@Injectable(as: EquipmentRepository)
|
|
class EquipmentRepositoryImpl implements EquipmentRepository {
|
|
final EquipmentRemoteDataSource remoteDataSource;
|
|
|
|
EquipmentRepositoryImpl({required this.remoteDataSource});
|
|
|
|
@override
|
|
Future<Either<Failure, PaginatedResponse<EquipmentDto>>> getEquipments({
|
|
int? page,
|
|
int? limit,
|
|
String? search,
|
|
}) async {
|
|
try {
|
|
final result = await remoteDataSource.getEquipments(
|
|
page: page ?? 1,
|
|
perPage: limit ?? 20,
|
|
search: search,
|
|
);
|
|
|
|
final paginatedResult = PaginatedResponse<EquipmentDto>(
|
|
items: result.items,
|
|
page: result.currentPage,
|
|
size: result.pageSize ?? 20,
|
|
totalElements: result.totalCount,
|
|
totalPages: result.totalPages,
|
|
first: result.currentPage == 1,
|
|
last: result.currentPage == result.totalPages,
|
|
);
|
|
|
|
return Right(paginatedResult);
|
|
} on ServerException catch (e) {
|
|
return Left(ServerFailure(message: e.message));
|
|
} catch (e) {
|
|
return Left(ServerFailure(message: '장비 목록 조회 실패: $e'));
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<Either<Failure, EquipmentDto>> getEquipmentDetail(int id) async {
|
|
try {
|
|
final equipment = await remoteDataSource.getEquipmentDetail(id);
|
|
return Right(equipment);
|
|
} on ServerException catch (e) {
|
|
return Left(ServerFailure(message: e.message));
|
|
} catch (e) {
|
|
return Left(ServerFailure(message: '장비 상세 조회 실패: $e'));
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<Either<Failure, EquipmentDto>> createEquipment(EquipmentRequestDto request) async {
|
|
try {
|
|
final equipment = await remoteDataSource.createEquipment(request);
|
|
return Right(equipment);
|
|
} on ServerException catch (e) {
|
|
return Left(ServerFailure(message: e.message));
|
|
} catch (e) {
|
|
return Left(ServerFailure(message: '장비 생성 실패: $e'));
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<Either<Failure, EquipmentDto>> updateEquipment(int id, EquipmentUpdateRequestDto request) async {
|
|
try {
|
|
final equipment = await remoteDataSource.updateEquipment(id, request);
|
|
return Right(equipment);
|
|
} on ServerException catch (e) {
|
|
return Left(ServerFailure(message: e.message));
|
|
} catch (e) {
|
|
return Left(ServerFailure(message: '장비 수정 실패: $e'));
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<Either<Failure, void>> deleteEquipment(int id) async {
|
|
try {
|
|
await remoteDataSource.deleteEquipment(id);
|
|
return const Right(null);
|
|
} on ServerException catch (e) {
|
|
return Left(ServerFailure(message: e.message));
|
|
} catch (e) {
|
|
return Left(ServerFailure(message: '장비 삭제 실패: $e'));
|
|
}
|
|
}
|
|
} |