PostImage.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using Domain.Entities.Forum.Boards;
  2. using Microsoft.EntityFrameworkCore;
  3. using System.ComponentModel;
  4. using System.ComponentModel.DataAnnotations;
  5. using System.ComponentModel.DataAnnotations.Schema;
  6. namespace Domain.Entities.Forum.Posts
  7. {
  8. [Table("PostImage")]
  9. [Index(nameof(BoardID))]
  10. [Index(nameof(PostID))]
  11. [Index(nameof(UUID), IsUnique = true)]
  12. [Index(nameof(PostID), nameof(HashedName))]
  13. [Index(nameof(PostID), nameof(HashedName), nameof(IsDisabled))]
  14. public class PostImage
  15. {
  16. [ForeignKey(nameof(BoardID))]
  17. public Board Board { get; set; } = null!;
  18. [ForeignKey(nameof(PostID))]
  19. public Post Post { get; set; } = null!;
  20. [Key]
  21. [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  22. [DisplayName("PK")]
  23. [Comment("PK")]
  24. public int ID { get; set; }
  25. [DisplayName("게시판 ID")]
  26. [Comment("게시판 ID")]
  27. public int BoardID { get; set; }
  28. [DisplayName("게시글 ID")]
  29. [Comment("게시글 ID")]
  30. public int PostID { get; set; }
  31. [DisplayName("이미지 ID")]
  32. [Comment("이미지 ID")]
  33. public Guid UUID { get; set; } = Guid.NewGuid();
  34. [DisplayName("원본 파일명")]
  35. [Comment("원본 파일명")]
  36. [StringLength(255, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  37. public string FileName { get; set; } = null!;
  38. [DisplayName("저장 파일명")]
  39. [Comment("저장 파일명")]
  40. [StringLength(255, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  41. public string HashedName { get; set; } = null!;
  42. [DisplayName("저장 경로")]
  43. [Comment("저장 경로")]
  44. [StringLength(500, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  45. public string Path { get; set; } = null!;
  46. [DisplayName("URL")]
  47. [Comment("URL")]
  48. [DataType(DataType.ImageUrl)]
  49. [Url(ErrorMessage = "올바른 URL 형식이 아닙니다.")]
  50. [StringLength(1000, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  51. public string Url { get; set; } = null!;
  52. [DisplayName("확장자")]
  53. [Comment("확장자")]
  54. [StringLength(10, ErrorMessage = "{0}는 {1}자 이하로 입력하세요.")]
  55. public string? Extension { get; set; } = null;
  56. [DisplayName("MINE 타입")]
  57. [Comment("MIME 타입")]
  58. [StringLength(100, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  59. public string? ContentType { get; set; } = null;
  60. [DisplayName("용량(byte)")]
  61. [Comment("용량(byte)")]
  62. public long? Size { get; set; } = null;
  63. [DisplayName("가로 해상도(px)")]
  64. [Comment("가로 해상도(px)")]
  65. public short? Width { get; set; } = null;
  66. [DisplayName("세로 해상도(px)")]
  67. [Comment("세로 해상도(px)")]
  68. public short? Height { get; set; } = null;
  69. [DisplayName("비활성 여부")]
  70. [Comment("비활성 여부")]
  71. public bool IsDisabled { get; set; } = false;
  72. [DisplayName("비활성 일시")]
  73. [Comment("비활성 일시")]
  74. [DataType(DataType.DateTime)]
  75. public DateTime? DisabledAt { get; set; } = null;
  76. [DisplayName("등록 일시")]
  77. [Comment("등록 일시")]
  78. [DataType(DataType.DateTime)]
  79. public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
  80. }
  81. }