MemberThumbChangeLog.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. namespace Domain.Entities.Members.Logs;
  4. /// <summary>
  5. /// 사용자 프로필 이미지 변경 내역
  6. /// </summary>
  7. public class MemberThumbChangeLog
  8. {
  9. [ForeignKey(nameof(MemberID))]
  10. public virtual 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? BeforeThumb { get; private set; } = default;
  15. public string? AfterThumb { get; private set; } = default;
  16. public string? Referer { get; private set; } = default;
  17. public string? IpAddress { get; private set; } = default;
  18. public string? UserAgent { get; private set; } = default;
  19. public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
  20. private MemberThumbChangeLog() { }
  21. private MemberThumbChangeLog(int memberID, string? beforeThumb, string? afterThumb, string? referer, string? ipAddress, string? userAgent)
  22. {
  23. if (memberID <= 0)
  24. {
  25. throw new ArgumentOutOfRangeException(nameof(memberID));
  26. }
  27. // Cloudflare 더블 경유 방어 — throw 대신 truncate.
  28. if (ipAddress is not null && ipAddress.Length > 45)
  29. {
  30. ipAddress = ipAddress[..45];
  31. }
  32. if (userAgent is not null && userAgent.Length > 512)
  33. {
  34. userAgent = userAgent[..512];
  35. }
  36. MemberID = memberID;
  37. BeforeThumb = beforeThumb;
  38. AfterThumb = afterThumb;
  39. Referer = referer;
  40. IpAddress = ipAddress;
  41. UserAgent = userAgent;
  42. CreatedAt = DateTime.UtcNow;
  43. }
  44. public static MemberThumbChangeLog Create(int memberID, string? beforeThumb, string? afterThumb, string? referer = null, string? ipAddress = null, string? userAgent = null)
  45. {
  46. return new(memberID, beforeThumb, afterThumb, referer, ipAddress, userAgent);
  47. }
  48. }