- License Expiry Summary API 연동 완료 - 30/60/90일 내 만료 예정 라이선스 요약 표시 - 대시보드 상단에 알림 카드로 통합 - 만료 임박 순서로 색상 구분 (빨강/주황/노랑) - Lookup 데이터 전역 캐싱 시스템 구축 - LookupService 및 RemoteDataSource 생성 - 전체 lookup 데이터 일괄 로드 및 캐싱 - 타입별 필터링 지원 - 새로운 모델 추가 - LicenseExpirySummary (Freezed) - LookupData, LookupCategory, LookupItem 모델 - CLAUDE.md 문서 업데이트 - 미사용 API 활용 계획 추가 - 구현 우선순위 정의 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
38 lines
1.6 KiB
Dart
38 lines
1.6 KiB
Dart
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
|
|
part 'license_expiry_summary.freezed.dart';
|
|
part 'license_expiry_summary.g.dart';
|
|
|
|
@freezed
|
|
class LicenseExpirySummary with _$LicenseExpirySummary {
|
|
const factory LicenseExpirySummary({
|
|
@JsonKey(name: 'within_30_days') required int within30Days,
|
|
@JsonKey(name: 'within_60_days') required int within60Days,
|
|
@JsonKey(name: 'within_90_days') required int within90Days,
|
|
@JsonKey(name: 'expired') required int expired,
|
|
@JsonKey(name: 'total_active') required int totalActive,
|
|
@JsonKey(name: 'licenses') required List<LicenseExpiryDetail> licenses,
|
|
}) = _LicenseExpirySummary;
|
|
|
|
factory LicenseExpirySummary.fromJson(Map<String, dynamic> json) =>
|
|
_$LicenseExpirySummaryFromJson(json);
|
|
}
|
|
|
|
@freezed
|
|
class LicenseExpiryDetail with _$LicenseExpiryDetail {
|
|
const factory LicenseExpiryDetail({
|
|
required int id,
|
|
@JsonKey(name: 'equipment_id') required int equipmentId,
|
|
@JsonKey(name: 'equipment_name') required String equipmentName,
|
|
@JsonKey(name: 'serial_number') required String serialNumber,
|
|
@JsonKey(name: 'company_name') required String companyName,
|
|
@JsonKey(name: 'license_type') required String licenseType,
|
|
@JsonKey(name: 'start_date') required String startDate,
|
|
@JsonKey(name: 'end_date') required String endDate,
|
|
@JsonKey(name: 'days_remaining') required int daysRemaining,
|
|
@JsonKey(name: 'is_expired') required bool isExpired,
|
|
}) = _LicenseExpiryDetail;
|
|
|
|
factory LicenseExpiryDetail.fromJson(Map<String, dynamic> json) =>
|
|
_$LicenseExpiryDetailFromJson(json);
|
|
} |