Attendance.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. namespace Domain.Entities.Members;
  4. /// <summary>
  5. /// 출석 기록
  6. /// </summary>
  7. public sealed class Attendance
  8. {
  9. [ForeignKey(nameof(MemberID))]
  10. public Member Member { get; private set; } = null!;
  11. [Key]
  12. public int ID { get; private set; }
  13. public int MemberID { get; private set; }
  14. public string Greeting { get; private set; } = default!;
  15. public int ConsecutiveDays { get; private set; }
  16. public int ExpRewarded { get; private set; }
  17. public int PointRewarded { get; private set; }
  18. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  19. private Attendance() { }
  20. private Attendance(int memberID, string greeting, int consecutiveDays, int expRewarded, int pointRewarded)
  21. {
  22. if (memberID <= 0)
  23. {
  24. throw new ArgumentOutOfRangeException(nameof(memberID));
  25. }
  26. if (greeting != null && greeting.Length > 200)
  27. {
  28. throw new ArgumentOutOfRangeException(nameof(greeting));
  29. }
  30. MemberID = memberID;
  31. Greeting = greeting ?? "";
  32. ConsecutiveDays = consecutiveDays;
  33. ExpRewarded = expRewarded;
  34. PointRewarded = pointRewarded;
  35. CreatedAt = DateTime.UtcNow;
  36. }
  37. public static Attendance Create(int memberID, string greeting, int consecutiveDays, int expRewarded, int pointRewarded)
  38. {
  39. return new(memberID, greeting, consecutiveDays, expRewarded, pointRewarded);
  40. }
  41. public void AddRankBonus(int bonusExp, int bonusPoint)
  42. {
  43. ExpRewarded += bonusExp;
  44. PointRewarded += bonusPoint;
  45. }
  46. }