Crew.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. using Domain.Entities.Members;
  4. namespace Domain.Entities.Donations;
  5. public class Crew
  6. {
  7. [ForeignKey(nameof(ChannelID))]
  8. public virtual Channel? Channel { get; private set; }
  9. [ForeignKey(nameof(MemberID))]
  10. public virtual Member? Member { get; private set; }
  11. private readonly List<CrewMember> _members = [];
  12. public IReadOnlyCollection<CrewMember> Members => _members;
  13. private readonly List<CrewSession> _sessions = [];
  14. public IReadOnlyCollection<CrewSession> Sessions => _sessions;
  15. [Key]
  16. public int ID { get; private set; }
  17. public int ChannelID { get; private set; }
  18. public int MemberID { get; private set; }
  19. public string Name { get; private set; } = default!;
  20. public string? Description { get; private set; }
  21. public int? MinAmount { get; private set; }
  22. public bool IsActive { get; private set; } = true;
  23. public DateTime? UpdatedAt { get; private set; }
  24. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  25. private Crew() { }
  26. public static Crew Create(int channelID, int memberID, string name, string? description = null, int? minAmount = null)
  27. {
  28. if (string.IsNullOrWhiteSpace(name))
  29. {
  30. throw new ArgumentException("Name is required.", nameof(name));
  31. }
  32. return new Crew
  33. {
  34. ChannelID = channelID,
  35. MemberID = memberID,
  36. Name = name,
  37. Description = description,
  38. MinAmount = minAmount
  39. };
  40. }
  41. public void Update(string name, string? description, int? minAmount, bool isActive)
  42. {
  43. Name = name;
  44. Description = description;
  45. MinAmount = minAmount;
  46. IsActive = isActive;
  47. UpdatedAt = DateTime.UtcNow;
  48. }
  49. }