MemberExpLog.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. namespace Domain.Entities.Members.Logs
  4. {
  5. /// <summary>
  6. /// 경험치 변동 내역
  7. /// </summary>
  8. public class MemberExpLog
  9. {
  10. [ForeignKey(nameof(MemberID))]
  11. public virtual Member Member { get; private set; } = null!;
  12. [Key]
  13. public int ID { get; private set; }
  14. public int MemberID { get; private set; }
  15. public string Reason { get; private set; } = default!;
  16. public int Amount { get; private set; }
  17. public long Balance { get; private set; }
  18. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  19. private MemberExpLog() { }
  20. private MemberExpLog(int memberID, string reason, int amount, long balance)
  21. {
  22. if (memberID <= 0)
  23. {
  24. throw new ArgumentOutOfRangeException(nameof(memberID));
  25. }
  26. if (string.IsNullOrWhiteSpace(reason))
  27. {
  28. throw new ArgumentException("Reason is required.", nameof(reason));
  29. }
  30. if (reason.Length > 200)
  31. {
  32. throw new ArgumentOutOfRangeException(nameof(reason));
  33. }
  34. MemberID = memberID;
  35. Reason = reason;
  36. Amount = amount;
  37. Balance = balance;
  38. CreatedAt = DateTime.UtcNow;
  39. }
  40. public static MemberExpLog Create(int memberID, string reason, int amount, long balance)
  41. {
  42. return new(memberID, reason, amount, balance);
  43. }
  44. }
  45. }