Crew.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 string? InviteCode { get; private set; }
  24. public DateTime? UpdatedAt { get; private set; }
  25. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  26. private Crew() { }
  27. public static Crew Create(int channelID, int memberID, string name, string? description = null, int? minAmount = null)
  28. {
  29. if (string.IsNullOrWhiteSpace(name))
  30. {
  31. throw new ArgumentException("Name is required.", nameof(name));
  32. }
  33. return new Crew
  34. {
  35. ChannelID = channelID,
  36. MemberID = memberID,
  37. Name = name,
  38. Description = description,
  39. MinAmount = minAmount
  40. };
  41. }
  42. public void Update(string name, string? description, int? minAmount, bool isActive)
  43. {
  44. Name = name;
  45. Description = description;
  46. MinAmount = minAmount;
  47. IsActive = isActive;
  48. UpdatedAt = DateTime.UtcNow;
  49. }
  50. public string GenerateInviteCode()
  51. {
  52. InviteCode = Guid.NewGuid().ToString("N")[..8].ToUpperInvariant();
  53. UpdatedAt = DateTime.UtcNow;
  54. return InviteCode;
  55. }
  56. }