| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using System.ComponentModel.DataAnnotations;
- using Domain.Entities.Common.ValueObject;
- using Domain.Entities.Wallets.ValueObject;
- namespace Domain.Entities.Wallets;
- public class WalletBalance
- {
- [Key]
- public int ID { get; private set; }
- public Guid WalletKey { get; private set; }
- public WalletBalanceType Type { get; private set; }
- public Money Amount { get; private set; } = Money.KRW(0);
- private WalletBalance() { }
- private WalletBalance(Guid walletKey, WalletBalanceType type, Money initial)
- {
- if (walletKey == Guid.Empty)
- {
- throw new ArgumentException("WalletKey is required.", nameof(walletKey));
- }
- WalletKey = walletKey;
- Type = type;
- Amount = initial;
- }
- public static WalletBalance Create(Guid walletKey, WalletBalanceType type, string currency = "KRW")
- {
- return new(walletKey, type, Money.Zero(currency));
- }
- public void Increase(Money amount)
- {
- EnsurePositive(amount);
- Amount = Amount + amount;
- }
- public void Decrease(Money amount)
- {
- EnsurePositive(amount);
- if (Amount.Value < amount.Value)
- {
- throw new InvalidOperationException("Insufficient balance.");
- }
- Amount = Amount - amount;
- }
- private static void EnsurePositive(Money amount)
- {
- if (amount.IsZero || amount.Value <= 0)
- {
- throw new ArgumentException("Amount must be positive.", nameof(amount));
- }
- }
- }
|