| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- using System.ComponentModel.DataAnnotations;
- using System.ComponentModel.DataAnnotations.Schema;
- using Domain.Entities.Common.ValueObject;
- using Domain.Entities.Wallets.ValueObject;
- namespace Domain.Entities.Wallets
- {
- public class WalletTransaction
- {
- [ForeignKey(nameof(WalletKey))]
- public virtual Wallet Wallet { get; private set; } = null!;
- [Key]
- public int ID { get; private set; }
- public Guid WalletKey { get; private set; }
- public WalletBalanceType BalanceType { get; private set; }
- public WalletTransactionType TxType { get; private set; }
- public Money Amount { get; private set; } = Money.KRW(0);
- public Money BalanceAfter { get; private set; } = Money.KRW(0);
- public string Reason { get; private set; } = default!;
- public string? RefID { get; private set; }
- public string? UserID { get; private set; }
- public string? Memo { get; private set; }
- public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
- private WalletTransaction() { }
- private WalletTransaction(
- Guid walletKey,
- WalletBalanceType balanceType,
- WalletTransactionType txType,
- Money amount,
- Money balanceAfter,
- string reason,
- string? refID,
- string? userID,
- string? memo
- ) {
- WalletKey = walletKey;
- BalanceType = balanceType;
- TxType = txType;
- Amount = amount;
- BalanceAfter = balanceAfter;
- Reason = reason;
- RefID = refID;
- UserID = userID;
- Memo = memo;
- }
- public static WalletTransaction Create(
- Guid walletKey,
- WalletBalanceType balanceType,
- WalletTransactionType txType,
- Money amount,
- Money balanceAfter,
- string reason,
- string? refID = null,
- string? userID = null,
- string? memo = null
- ) {
- if (walletKey == Guid.Empty)
- {
- throw new ArgumentException("WalletKey is required.", nameof(walletKey));
- }
- if (amount.IsZero || amount.Value <= 0)
- {
- throw new ArgumentException("Transaction amount must be positive.", nameof(amount));
- }
- if (string.IsNullOrWhiteSpace(reason))
- {
- throw new ArgumentException("Reason is required.", nameof(reason));
- }
- return new WalletTransaction(walletKey, balanceType, txType, amount, balanceAfter, reason, refID, userID, memo);
- }
- }
- }
|