68 lines
2.3 KiB
Dart
68 lines
2.3 KiB
Dart
import 'package:dartz/dartz.dart';
|
|
import '../../repositories/equipment_repository.dart';
|
|
import '../../../data/models/equipment/equipment_dto.dart';
|
|
import '../../../core/errors/failures.dart';
|
|
import '../base_usecase.dart';
|
|
|
|
/// 장비 수정 파라미터
|
|
class UpdateEquipmentParams {
|
|
final int id;
|
|
final EquipmentUpdateRequestDto request;
|
|
|
|
const UpdateEquipmentParams({
|
|
required this.id,
|
|
required this.request,
|
|
});
|
|
}
|
|
|
|
/// 장비 수정 UseCase
|
|
class UpdateEquipmentUseCase extends UseCase<EquipmentDto, UpdateEquipmentParams> {
|
|
final EquipmentRepository _equipmentRepository;
|
|
|
|
UpdateEquipmentUseCase(this._equipmentRepository);
|
|
|
|
@override
|
|
Future<Either<Failure, EquipmentDto>> call(UpdateEquipmentParams params) async {
|
|
// ID 검증
|
|
if (params.id <= 0) {
|
|
return Left(ValidationFailure(
|
|
message: '올바르지 않은 장비 ID입니다.',
|
|
errors: {'id': '장비 ID는 0보다 커야 합니다.'},
|
|
));
|
|
}
|
|
|
|
// 입력 검증 (값이 제공된 경우만)
|
|
if (params.request.companiesId != null && params.request.companiesId! <= 0) {
|
|
return Left(ValidationFailure(
|
|
message: '회사를 선택해주세요.',
|
|
errors: {'companiesId': '올바른 회사를 선택해주세요.'},
|
|
));
|
|
}
|
|
|
|
if (params.request.modelsId != null && params.request.modelsId! <= 0) {
|
|
return Left(ValidationFailure(
|
|
message: '모델을 선택해주세요.',
|
|
errors: {'modelsId': '올바른 모델을 선택해주세요.'},
|
|
));
|
|
}
|
|
|
|
if (params.request.serialNumber != null && params.request.serialNumber!.trim().isEmpty) {
|
|
return Left(ValidationFailure(
|
|
message: '시리얼 번호를 입력해주세요.',
|
|
errors: {'serialNumber': '시리얼 번호는 비어있을 수 없습니다.'},
|
|
));
|
|
}
|
|
|
|
// 워런티 기간 검증
|
|
if (params.request.warrantyStartedAt != null &&
|
|
params.request.warrantyEndedAt != null &&
|
|
params.request.warrantyStartedAt!.isAfter(params.request.warrantyEndedAt!)) {
|
|
return Left(ValidationFailure(
|
|
message: '워런티 시작일이 종료일보다 늦을 수 없습니다.',
|
|
errors: {'warrantyPeriod': '워런티 기간을 올바르게 설정해주세요.'},
|
|
));
|
|
}
|
|
|
|
return await _equipmentRepository.updateEquipment(params.id, params.request);
|
|
}
|
|
} |