GameConfiguration.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Domain.Entities.Store;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.EntityFrameworkCore.Metadata.Builders;
  4. namespace Infrastructure.Persistence.Configurations.Store;
  5. public sealed class GameConfiguration : IEntityTypeConfiguration<Game>
  6. {
  7. public void Configure(EntityTypeBuilder<Game> builder)
  8. {
  9. builder.ToTable(nameof(Game), t => t.HasComment("상점 제휴 게임"));
  10. builder.HasKey(x => x.ID);
  11. builder.Property(x => x.Code).HasMaxLength(6).HasComment("게임 코드 (UNIQUE, 외부 연동/내부 식별)");
  12. builder.Property(x => x.KorName).HasMaxLength(255).IsRequired().HasComment("게임 한글명");
  13. builder.Property(x => x.EngName).HasMaxLength(255).HasComment("게임 영문명");
  14. builder.Property(x => x.Publisher).HasMaxLength(100).IsRequired().HasComment("게임사/퍼블리셔");
  15. builder.Property(x => x.Thumbnail).HasMaxLength(500).HasComment("작은 이미지 (목록 카드용)");
  16. builder.Property(x => x.BigImage).HasMaxLength(500).HasComment("큰 이미지 (상세/배너용)");
  17. builder.Property(x => x.Description).HasColumnType("nvarchar(max)").HasComment("게임 소개 (CKEditor HTML)");
  18. builder.Property(x => x.CommissionRate).HasPrecision(10, 7).IsRequired().HasComment("게임사 수익률(%) — 0~100, 소수점 7자리");
  19. builder.Property(x => x.Link).HasMaxLength(255).HasComment("게임 다운로드/공식 사이트 주소");
  20. builder.Property(x => x.TrailerUrl).HasMaxLength(500).HasComment("YouTube 예고편 URL");
  21. builder.Property(x => x.MinSpec).HasColumnType("nvarchar(max)").HasComment("최소 사양 (자유 텍스트)");
  22. builder.Property(x => x.RecommendedSpec).HasColumnType("nvarchar(max)").HasComment("권장 사양 (자유 텍스트)");
  23. builder.Property(x => x.ReleaseDate).HasComment("게임 출시일");
  24. builder.Property(x => x.IsActive).IsRequired();
  25. builder.Property(x => x.Order).IsRequired();
  26. builder.Property(x => x.CreatedAt).IsRequired();
  27. builder.Property(x => x.UpdatedAt);
  28. builder.HasIndex(x => x.KorName).IsUnique();
  29. // Code 는 NULL 허용하면서 NOT NULL 값에 대해서만 UNIQUE (SQL Server filtered index)
  30. builder.HasIndex(x => x.Code).IsUnique().HasFilter("[Code] IS NOT NULL");
  31. builder.HasIndex(x => new { x.IsActive, x.Order });
  32. }
  33. }