import 'package:freezed_annotation/freezed_annotation.dart'; part 'license_dto.freezed.dart'; part 'license_dto.g.dart'; /// 라이선스 전체 정보 DTO @freezed class LicenseDto with _$LicenseDto { const factory LicenseDto({ required int id, @JsonKey(name: 'license_key') required String licenseKey, @JsonKey(name: 'product_name') String? productName, String? vendor, @JsonKey(name: 'license_type') String? licenseType, @JsonKey(name: 'user_count') int? userCount, @JsonKey(name: 'purchase_date') DateTime? purchaseDate, @JsonKey(name: 'expiry_date') DateTime? expiryDate, @JsonKey(name: 'purchase_price') double? purchasePrice, @JsonKey(name: 'company_id') int? companyId, @JsonKey(name: 'branch_id') int? branchId, @JsonKey(name: 'assigned_user_id') int? assignedUserId, String? remark, @JsonKey(name: 'is_active') required bool isActive, @JsonKey(name: 'created_at') required DateTime createdAt, @JsonKey(name: 'updated_at') required DateTime updatedAt, // 추가 필드 (조인된 데이터) @JsonKey(name: 'company_name') String? companyName, @JsonKey(name: 'branch_name') String? branchName, @JsonKey(name: 'assigned_user_name') String? assignedUserName, }) = _LicenseDto; factory LicenseDto.fromJson(Map json) => _$LicenseDtoFromJson(json); } /// 라이선스 목록 응답 DTO @freezed class LicenseListResponseDto with _$LicenseListResponseDto { const factory LicenseListResponseDto({ required List items, required int total, required int page, @JsonKey(name: 'per_page') required int perPage, @JsonKey(name: 'total_pages') required int totalPages, }) = _LicenseListResponseDto; factory LicenseListResponseDto.fromJson(Map json) => _$LicenseListResponseDtoFromJson(json); } /// 만료 예정 라이선스 DTO @freezed class ExpiringLicenseDto with _$ExpiringLicenseDto { const factory ExpiringLicenseDto({ required int id, @JsonKey(name: 'license_key') required String licenseKey, @JsonKey(name: 'product_name') String? productName, @JsonKey(name: 'company_name') String? companyName, @JsonKey(name: 'expiry_date') required DateTime expiryDate, @JsonKey(name: 'days_until_expiry') required int daysUntilExpiry, @JsonKey(name: 'is_active') required bool isActive, }) = _ExpiringLicenseDto; factory ExpiringLicenseDto.fromJson(Map json) => _$ExpiringLicenseDtoFromJson(json); } /// 만료 예정 라이선스 목록 응답 DTO @freezed class ExpiringLicenseListDto with _$ExpiringLicenseListDto { const factory ExpiringLicenseListDto({ required List items, required int total, required int page, @JsonKey(name: 'per_page') required int perPage, @JsonKey(name: 'total_pages') required int totalPages, }) = _ExpiringLicenseListDto; factory ExpiringLicenseListDto.fromJson(Map json) => _$ExpiringLicenseListDtoFromJson(json); }