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 CreateLicenseUseCase implements UseCase { final LicenseRepository repository; CreateLicenseUseCase(this.repository); @override Future> call(CreateLicenseParams params) async { try { // 비즈니스 로직: 만료일 검증 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.createLicense(params.toMap()); return Right(license); } catch (e) { return Left(ServerFailure(message: e.toString())); } } } /// 라이선스 생성 파라미터 class CreateLicenseParams { final int equipmentId; final int companyId; final String licenseType; final DateTime startDate; final DateTime expiryDate; final String? description; final double? cost; CreateLicenseParams({ required this.equipmentId, required this.companyId, required this.licenseType, required this.startDate, required this.expiryDate, this.description, this.cost, }); Map toMap() { return { 'equipment_id': equipmentId, 'company_id': companyId, 'license_type': licenseType, 'start_date': startDate.toIso8601String(), 'expiry_date': expiryDate.toIso8601String(), 'description': description, 'cost': cost, }; } }