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 { final EquipmentRepository _equipmentRepository; UpdateEquipmentUseCase(this._equipmentRepository); @override Future> 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); } }