part of '../wallet_dtos.dart'; @freezed abstract class WalletSummaryDto with _$WalletSummaryDto { const factory WalletSummaryDto({ @JsonKey(name: 'point_balance') int? pointBalance, @JsonKey(name: 'coin_balance') int? coinBalance, @JsonKey(name: 'point_value') int? pointValue, @JsonKey(name: 'point_discount_value') int? pointDiscountValue, @JsonKey(name: 'nearest_expiring') NearestExpiringDto? nearestExpiring, @JsonKey(name: 'recent_transactions') List? recentTransactions, }) = _WalletSummaryDto; factory WalletSummaryDto.fromJson(Map json) => _$WalletSummaryDtoFromJson(json); const WalletSummaryDto._(); WalletSummary toDomain() => WalletSummary( pointBalance: pointBalance ?? 0, coinBalance: coinBalance ?? 0, pointValue: pointValue ?? 0, pointDiscountValue: pointDiscountValue ?? 0, nearestExpiringPoint: nearestExpiring?.point?.toDomain(), nearestExpiringCoin: nearestExpiring?.coin?.toDomain(), recentTransactions: recentTransactions?.map((e) => e.toDomain()).toList() ?? [], ); } @freezed abstract class NearestExpiringDto with _$NearestExpiringDto { const factory NearestExpiringDto({ @JsonKey(name: 'point') ExpiringAmountDto? point, @JsonKey(name: 'coin') ExpiringAmountDto? coin, }) = _NearestExpiringDto; factory NearestExpiringDto.fromJson(Map json) => _$NearestExpiringDtoFromJson(json); } @freezed abstract class ExpiringAmountDto with _$ExpiringAmountDto { const factory ExpiringAmountDto({ @JsonKey(name: 'amount') int? amount, @JsonKey(name: 'date') String? date, }) = _ExpiringAmountDto; factory ExpiringAmountDto.fromJson(Map json) => _$ExpiringAmountDtoFromJson(json); const ExpiringAmountDto._(); ExpiringAmount? toDomain() { final parsed = _parseDate(date); if (parsed == null) return null; return ExpiringAmount(amount: amount ?? 0, date: parsed); } }