import 'package:dartz/dartz.dart'; import 'package:injectable/injectable.dart'; import '../../../data/models/license/license_dto.dart'; import '../../../data/repositories/license_repository.dart'; import '../../../core/errors/failures.dart'; import '../base_usecase.dart'; /// 라이선스 수정 UseCase @injectable class UpdateLicenseUseCase implements UseCase { final LicenseRepository repository; UpdateLicenseUseCase(this.repository); @override Future> call(UpdateLicenseParams params) async { try { // 비즈니스 로직: 만료일 검증 if (params.expiryDate != null && params.startDate != null) { if (params.expiryDate!.isBefore(params.startDate!)) { return Left(ValidationFailure(message: '만료일은 시작일 이후여야 합니다')); } // 비즈니스 로직: 최소 라이선스 기간 검증 (30일) final duration = params.expiryDate!.difference(params.startDate!).inDays; if (duration < 30) { return Left(ValidationFailure(message: '라이선스 기간은 최소 30일 이상이어야 합니다')); } } final license = await repository.updateLicense(params.id, params.toMap()); return Right(license); } catch (e) { return Left(ServerFailure(message: e.toString())); } } } /// 라이선스 수정 파라미터 class UpdateLicenseParams { final int id; final int? equipmentId; final int? companyId; final String? licenseType; final DateTime? startDate; final DateTime? expiryDate; final String? description; final double? cost; final String? status; UpdateLicenseParams({ required this.id, this.equipmentId, this.companyId, this.licenseType, this.startDate, this.expiryDate, this.description, this.cost, this.status, }); Map toMap() { final Map data = {}; if (equipmentId != null) data['equipment_id'] = equipmentId; if (companyId != null) data['company_id'] = companyId; if (licenseType != null) data['license_type'] = licenseType; if (startDate != null) data['start_date'] = startDate!.toIso8601String(); if (expiryDate != null) data['expiry_date'] = expiryDate!.toIso8601String(); if (description != null) data['description'] = description; if (cost != null) data['cost'] = cost; if (status != null) data['status'] = status; return data; } }