255 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			255 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
						|
import 'package:island/models/account.dart';
 | 
						|
 | 
						|
part 'wallet.freezed.dart';
 | 
						|
part 'wallet.g.dart';
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnWallet with _$SnWallet {
 | 
						|
  const factory SnWallet({
 | 
						|
    required String id,
 | 
						|
    required List<SnWalletPocket> pockets,
 | 
						|
    required String accountId,
 | 
						|
    required SnAccount? account,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnWallet;
 | 
						|
 | 
						|
  factory SnWallet.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnWalletFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnWalletStats with _$SnWalletStats {
 | 
						|
  const factory SnWalletStats({
 | 
						|
    required DateTime periodBegin,
 | 
						|
    required DateTime periodEnd,
 | 
						|
    required int totalTransactions,
 | 
						|
    required int totalOrders,
 | 
						|
    required double totalIncome,
 | 
						|
    required double totalOutgoing,
 | 
						|
    required double sum,
 | 
						|
    @Default({}) Map<String, double> incomeCategories,
 | 
						|
    @Default({}) Map<String, double> outgoingCategories,
 | 
						|
  }) = _SnWalletStats;
 | 
						|
 | 
						|
  factory SnWalletStats.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnWalletStatsFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnWalletPocket with _$SnWalletPocket {
 | 
						|
  const factory SnWalletPocket({
 | 
						|
    required String id,
 | 
						|
    required String currency,
 | 
						|
    required double amount,
 | 
						|
    required String walletId,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnWalletPocket;
 | 
						|
 | 
						|
  factory SnWalletPocket.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnWalletPocketFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnTransaction with _$SnTransaction {
 | 
						|
  const factory SnTransaction({
 | 
						|
    required String id,
 | 
						|
    required String currency,
 | 
						|
    required double amount,
 | 
						|
    required String? remarks,
 | 
						|
    required int type,
 | 
						|
    required String? payerWalletId,
 | 
						|
    required SnWallet? payerWallet,
 | 
						|
    required String? payeeWalletId,
 | 
						|
    required SnWallet? payeeWallet,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnTransaction;
 | 
						|
 | 
						|
  factory SnTransaction.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnTransactionFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnWalletSubscription with _$SnWalletSubscription {
 | 
						|
  const factory SnWalletSubscription({
 | 
						|
    required String id,
 | 
						|
    required DateTime begunAt,
 | 
						|
    required DateTime? endedAt,
 | 
						|
    required String identifier,
 | 
						|
    @Default(true) bool isActive,
 | 
						|
    @Default(false) bool isFreeTrial,
 | 
						|
    @Default(1) int status,
 | 
						|
    required String? paymentMethod,
 | 
						|
    required Map<String, dynamic>? paymentDetails,
 | 
						|
    required double? basePrice,
 | 
						|
    required String? couponId,
 | 
						|
    required dynamic coupon,
 | 
						|
    required DateTime? renewalAt,
 | 
						|
    required String accountId,
 | 
						|
    required SnAccount? account,
 | 
						|
    @Default(true) bool isAvailable,
 | 
						|
    required double? finalPrice,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnWalletSubscription;
 | 
						|
 | 
						|
  factory SnWalletSubscription.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnWalletSubscriptionFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnWalletSubscriptionRef with _$SnWalletSubscriptionRef {
 | 
						|
  const factory SnWalletSubscriptionRef({
 | 
						|
    required String id,
 | 
						|
    required bool isActive,
 | 
						|
    required String accountId,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required String identifier,
 | 
						|
  }) = _SnWalletSubscriptionRef;
 | 
						|
 | 
						|
  factory SnWalletSubscriptionRef.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnWalletSubscriptionRefFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnWalletOrder with _$SnWalletOrder {
 | 
						|
  const factory SnWalletOrder({
 | 
						|
    required String id,
 | 
						|
    required int status,
 | 
						|
    required String currency,
 | 
						|
    required String? remarks,
 | 
						|
    required String appIdentifier,
 | 
						|
    @Default({}) Map<String, dynamic> meta,
 | 
						|
    required int amount,
 | 
						|
    required DateTime expiredAt,
 | 
						|
    required String? payeeWalletId,
 | 
						|
    required String? transactionId,
 | 
						|
    required String? issuerAppId,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnWalletOrder;
 | 
						|
 | 
						|
  factory SnWalletOrder.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnWalletOrderFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnWalletGift with _$SnWalletGift {
 | 
						|
  const factory SnWalletGift({
 | 
						|
    required String id,
 | 
						|
    required String giftCode,
 | 
						|
    required String subscriptionIdentifier,
 | 
						|
    required String? recipientId,
 | 
						|
    required SnAccount? recipient,
 | 
						|
    required String gifterId,
 | 
						|
    required SnAccount? gifter,
 | 
						|
    required String? redeemerId,
 | 
						|
    required SnAccount? redeemer,
 | 
						|
    required String? message,
 | 
						|
    required int status,
 | 
						|
    required DateTime? redeemedAt,
 | 
						|
    required DateTime? expiredAt,
 | 
						|
    required String? subscriptionId,
 | 
						|
    required SnWalletSubscription? subscription,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnWalletGift;
 | 
						|
 | 
						|
  factory SnWalletGift.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnWalletGiftFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnWalletFund with _$SnWalletFund {
 | 
						|
  const factory SnWalletFund({
 | 
						|
    required String id,
 | 
						|
    required String currency,
 | 
						|
    required double totalAmount,
 | 
						|
    required int splitType, // 0: even, 1: random
 | 
						|
    required int
 | 
						|
    status, // 0: created, 1: partially claimed, 2: fully claimed, 3: expired
 | 
						|
    required String? message,
 | 
						|
    required String creatorAccountId,
 | 
						|
    required SnAccount? creatorAccount,
 | 
						|
    required DateTime expiredAt,
 | 
						|
    required List<SnWalletFundRecipient> recipients,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnWalletFund;
 | 
						|
 | 
						|
  factory SnWalletFund.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnWalletFundFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnWalletFundRecipient with _$SnWalletFundRecipient {
 | 
						|
  const factory SnWalletFundRecipient({
 | 
						|
    required String id,
 | 
						|
    required String fundId,
 | 
						|
    required String recipientAccountId,
 | 
						|
    required SnAccount? recipientAccount,
 | 
						|
    required double amount,
 | 
						|
    required bool isReceived,
 | 
						|
    required DateTime? receivedAt,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnWalletFundRecipient;
 | 
						|
 | 
						|
  factory SnWalletFundRecipient.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnWalletFundRecipientFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnLotteryTicket with _$SnLotteryTicket {
 | 
						|
  const factory SnLotteryTicket({
 | 
						|
    required String id,
 | 
						|
    required String accountId,
 | 
						|
    required SnAccount? account,
 | 
						|
    required List<int> regionOneNumbers,
 | 
						|
    required int regionTwoNumber,
 | 
						|
    required int multiplier,
 | 
						|
    required int drawStatus,
 | 
						|
    required DateTime? drawDate,
 | 
						|
    required List<int>? matchedRegionOneNumbers,
 | 
						|
    required int? matchedRegionTwoNumber,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnLotteryTicket;
 | 
						|
 | 
						|
  factory SnLotteryTicket.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnLotteryTicketFromJson(json);
 | 
						|
}
 | 
						|
 | 
						|
@freezed
 | 
						|
sealed class SnLotteryRecord with _$SnLotteryRecord {
 | 
						|
  const factory SnLotteryRecord({
 | 
						|
    required String id,
 | 
						|
    required DateTime drawDate,
 | 
						|
    required List<int> winningRegionOneNumbers,
 | 
						|
    required int winningRegionTwoNumber,
 | 
						|
    required int totalTickets,
 | 
						|
    required int totalPrizesAwarded,
 | 
						|
    required double totalPrizeAmount,
 | 
						|
    required DateTime createdAt,
 | 
						|
    required DateTime updatedAt,
 | 
						|
    required DateTime? deletedAt,
 | 
						|
  }) = _SnLotteryRecord;
 | 
						|
 | 
						|
  factory SnLotteryRecord.fromJson(Map<String, dynamic> json) =>
 | 
						|
      _$SnLotteryRecordFromJson(json);
 | 
						|
}
 |