import 'package:dartz/dartz.dart'; import '../../core/errors/failures.dart'; import '../../models/license_model.dart'; import '../../data/models/common/paginated_response.dart'; import '../../data/models/dashboard/license_expiry_summary.dart'; /// 라이선스 관리 Repository 인터페이스 /// 장비 라이선스 및 유지보수 계약 정보 관리를 담당 abstract class LicenseRepository { /// 라이선스 목록 조회 /// [page] 페이지 번호 (기본값: 1) /// [limit] 페이지당 항목 수 (기본값: 20) /// [search] 검색어 (라이선스명, 회사명, 장비명 등) /// [companyId] 회사 ID 필터 /// [equipmentType] 장비 유형 필터 /// [expiryStatus] 만료 상태 필터 ('expired', 'expiring', 'active') /// [sortBy] 정렬 기준 ('name', 'expiryDate', 'createdAt' 등) /// [sortOrder] 정렬 순서 ('asc', 'desc') /// Returns: 페이지네이션된 라이선스 목록 Future>> getLicenses({ int? page, int? limit, String? search, int? companyId, String? equipmentType, String? expiryStatus, String? sortBy, String? sortOrder, }); /// 라이선스 상세 정보 조회 /// [id] 라이선스 고유 식별자 /// Returns: 라이선스 상세 정보 (회사, 장비 정보 포함) Future> getLicenseById(int id); /// 라이선스 생성 /// [license] 생성할 라이선스 정보 /// Returns: 생성된 라이선스 정보 (ID 포함) Future> createLicense(License license); /// 라이선스 정보 수정 /// [id] 수정할 라이선스 고유 식별자 /// [license] 수정할 라이선스 정보 /// Returns: 수정된 라이선스 정보 Future> updateLicense(int id, License license); /// 라이선스 삭제 /// [id] 삭제할 라이선스 고유 식별자 /// Returns: 삭제 성공/실패 여부 Future> deleteLicense(int id); /// 만료 예정 라이선스 조회 /// [days] 앞으로 N일 내 만료 예정 (기본값: 30일) /// [companyId] 회사 ID 필터 (선택적) /// Returns: 만료 예정 라이선스 목록 Future>> getExpiringLicenses({int days = 30, int? companyId}); /// 만료된 라이선스 조회 /// [companyId] 회사 ID 필터 (선택적) /// Returns: 이미 만료된 라이선스 목록 Future>> getExpiredLicenses({int? companyId}); /// 라이선스 만료 요약 정보 조회 /// 대시보드용 30일/60일/90일 내 만료 예정 요약 정보 /// Returns: 만료 예정 요약 정보 Future> getLicenseExpirySummary(); /// 라이선스 갱신 /// [id] 갱신할 라이선스 ID /// [newExpiryDate] 새로운 만료일 /// [renewalCost] 갱신 비용 (선택적) /// [renewalNote] 갱신 비고 (선택적) /// Returns: 갱신된 라이선스 정보 Future> renewLicense( int id, DateTime newExpiryDate, {double? renewalCost, String? renewalNote} ); /// 회사별 라이선스 통계 /// [companyId] 회사 ID /// Returns: 해당 회사의 라이선스 통계 정보 (전체, 활성, 만료, 만료예정) Future>> getLicenseStatsByCompany(int companyId); /// 라이선스 유형별 통계 /// Returns: 라이선스 유형별 개수 (소프트웨어, 하드웨어 등) Future>> getLicenseCountByType(); /// 라이선스 만료일 사전 알림 설정 /// [licenseId] 라이선스 ID /// [notifyDays] 만료 N일 전 알림 (기본값: 30일) /// Returns: 알림 설정 성공/실패 여부 Future> setExpiryNotification(int licenseId, {int notifyDays = 30}); /// 라이선스 검색 (자동완성용) /// [query] 검색 쿼리 /// [companyId] 회사 ID 필터 (선택적) /// [limit] 결과 제한 수 (기본값: 10) /// Returns: 일치하는 라이선스 목록 Future>> searchLicenses(String query, {int? companyId, int? limit}); }