CrewSession.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. using Domain.Entities.Donations.ValueObject;
  4. namespace Domain.Entities.Donations;
  5. public class CrewSession
  6. {
  7. [ForeignKey(nameof(CrewID))]
  8. public virtual Crew? Crew { get; private set; }
  9. private readonly List<CrewSessionConsent> _consents = [];
  10. public IReadOnlyCollection<CrewSessionConsent> Consents => _consents;
  11. private readonly List<CrewDonationSummary> _summaries = [];
  12. public IReadOnlyCollection<CrewDonationSummary> Summaries => _summaries;
  13. [Key]
  14. public int ID { get; private set; }
  15. public int CrewID { get; private set; }
  16. public string Title { get; private set; } = default!;
  17. public CrewSessionStatus Status { get; private set; } = CrewSessionStatus.Inviting;
  18. public DateTime? StartedAt { get; private set; }
  19. public DateTime? EndedAt { get; private set; }
  20. public int TotalAmount { get; private set; }
  21. public int TotalDonationCount { get; private set; }
  22. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  23. private CrewSession() { }
  24. public static CrewSession Create(int crewID, string title)
  25. {
  26. return new CrewSession
  27. {
  28. CrewID = crewID,
  29. Title = title
  30. };
  31. }
  32. public void Activate()
  33. {
  34. if (Status != CrewSessionStatus.Inviting)
  35. {
  36. throw new InvalidOperationException("Only inviting sessions can be activated.");
  37. }
  38. Status = CrewSessionStatus.Active;
  39. StartedAt = DateTime.UtcNow;
  40. }
  41. public void End()
  42. {
  43. if (Status != CrewSessionStatus.Active)
  44. {
  45. throw new InvalidOperationException("Only active sessions can be ended.");
  46. }
  47. Status = CrewSessionStatus.Ended;
  48. EndedAt = DateTime.UtcNow;
  49. }
  50. public void AddDonation(int amount)
  51. {
  52. TotalAmount += amount;
  53. TotalDonationCount++;
  54. }
  55. }