DonationRanking.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. using Domain.Entities.Donations.ValueObject;
  4. using Domain.Entities.Members;
  5. namespace Domain.Entities.Donations;
  6. public class DonationRanking
  7. {
  8. [ForeignKey(nameof(ChannelID))]
  9. public virtual Channel? Channel { get; private set; }
  10. [ForeignKey(nameof(SponsorMemberID))]
  11. public virtual Member? Sponsor { get; private set; }
  12. [Key]
  13. public int ID { get; private set; }
  14. public int ChannelID { get; private set; }
  15. public int SponsorMemberID { get; private set; }
  16. public RankPeriodType PeriodType { get; private set; }
  17. public DateTime PeriodStart { get; private set; }
  18. public DateTime? PeriodEnd { get; private set; }
  19. public int Rank { get; private set; }
  20. public int TotalAmount { get; private set; }
  21. public int DonationCount { get; private set; }
  22. public string SponsorName { get; private set; } = default!;
  23. public bool IsActive { get; private set; } = true;
  24. public DateTime? UpdatedAt { get; private set; }
  25. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  26. private DonationRanking() { }
  27. public static DonationRanking Create(
  28. int channelID,
  29. int sponsorMemberID,
  30. RankPeriodType periodType,
  31. DateTime periodStart,
  32. DateTime? periodEnd,
  33. int totalAmount,
  34. int donationCount,
  35. string sponsorName,
  36. int rank
  37. ) {
  38. return new DonationRanking
  39. {
  40. ChannelID = channelID,
  41. SponsorMemberID = sponsorMemberID,
  42. PeriodType = periodType,
  43. PeriodStart = periodStart,
  44. PeriodEnd = periodEnd,
  45. TotalAmount = totalAmount,
  46. DonationCount = donationCount,
  47. SponsorName = sponsorName,
  48. Rank = rank
  49. };
  50. }
  51. public void UpdateRanking(int totalAmount, int donationCount, int rank, string sponsorName)
  52. {
  53. TotalAmount = totalAmount;
  54. DonationCount = donationCount;
  55. Rank = rank;
  56. SponsorName = sponsorName;
  57. UpdatedAt = DateTime.UtcNow;
  58. }
  59. }