namespace BrokerCore.DbEntity; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; public class PlanetExchangeOrderConfig : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("planet_item_exchange_order"); builder.HasIndex(o => o.CreatedAt); builder.HasIndex(o => o.OrderStatus); builder.HasIndex(o => o.PlanetId); builder.HasIndex(o => o.SeasonId); builder.HasIndex(o => o.AccountId); builder.HasIndex(o => o.UserGuid); // 기본 키 (Primary Key) builder.HasKey(o => o.OrderId); builder.Property(o => o.OrderId) .HasColumnOrder(1) .HasColumnName("order_id") .HasMaxLength(50) .IsRequired() .HasComment("교환 주문 아이디 (GUID)"); // 주문 상태 (Enum) builder.Property(o => o.OrderStatus) .HasColumnOrder(2) .HasColumnName("order_status") .IsRequired() .HasConversion() .HasMaxLength(50) .HasComment("교환 주문 상태"); // 플래닛 ID (string) builder.Property(o => o.PlanetId) .HasColumnOrder(3) .HasColumnName("planet_id") .HasMaxLength(50) .IsRequired() .HasComment("플래닛 아이디"); // PlanetInfo와의 외래 키 관계 설정 builder.HasOne() .WithMany() .HasForeignKey(o => o.PlanetId) .OnDelete(DeleteBehavior.Restrict) // 삭제 동작 정책을 Restrict로 설정 .HasConstraintName("FK_PlanetExchangeOrder_PlanetInfo"); builder.Property(o => o.SeasonId) .HasColumnOrder(4) .HasColumnName("season_id") .HasMaxLength(50) .IsRequired() .HasComment("시즌 아이디"); builder.Property(o => o.ExchangeMetaId) .HasColumnOrder(5) .HasColumnName("exchange_meta_id") .HasMaxLength(50) .IsRequired() .HasComment("교환 메타 아이디"); builder.Property(o => o.ExchangeMetaAmount) .HasColumnOrder(6) .HasColumnName("exchange_meta_amount") .HasColumnType("INT") .IsRequired() .HasComment("교환 메타 수량"); // 계정 ID (ulong) builder.Property(o => o.AccountId) .HasColumnOrder(7) .HasColumnName("account_id") .HasMaxLength(50) .IsRequired() .HasComment("SSO 아이디"); // 사용자 GUID (string) builder.Property(o => o.UserGuid) .HasColumnOrder(8) .HasColumnName("user_guid") .HasMaxLength(50) .IsRequired() .HasComment("유저 아이디 (GUID)"); // 사용자 닉네임 (string) builder.Property(o => o.Nickname) .HasColumnOrder(9) .HasColumnName("nickname") .HasMaxLength(50) .IsRequired() .HasComment("유저 닉네임"); // 칼리버스 아이템 타입 (Enum) builder.Property(o => o.CaliverseItemType) .HasColumnOrder(10) .HasColumnName("caliverse_item_type") .IsRequired() .HasConversion() .HasMaxLength(50) .HasComment("칼리버스 아이템 타입"); // 칼리버스 아이템 ID (string) builder.Property(o => o.CaliverseItemId) .HasColumnOrder(11) .HasColumnName("caliverse_item_id") .HasMaxLength(50) .IsRequired() .HasComment("칼리버스 아이템 아이디"); // 칼리버스 아이템 수량 (long) builder.Property(o => o.CaliverseItemDeltaAmount) .HasColumnOrder(12) .HasColumnName("caliverse_item_quantity") .HasColumnType("INT") .IsRequired() .HasComment("칼리버스 아이템 갯수"); // 플래닛 아이템 타입 (Enum) builder.Property(o => o.PlanetItemType) .HasColumnOrder(13) .HasColumnName("planet_item_type") .IsRequired() .HasConversion() .HasMaxLength(50) .HasComment("플래닛 아이템 타입"); // 플래닛 아이템 ID (string) builder.Property(o => o.PlanetItemId) .HasColumnOrder(14) .HasColumnName("planet_item_id") .HasMaxLength(50) .IsRequired() .HasComment("플래닛 아이템 아이디"); // 플래닛 아이템 수량 (long) builder.Property(o => o.PlanetItemDeltaAmount) .HasColumnOrder(15) .HasColumnName("planet_item_quantity") .HasColumnType("INT") .IsRequired() .HasComment("플래닛 아이템 갯수"); // 생성 시간 (TIMESTAMP) builder.Property(o => o.CreatedAt) .HasColumnOrder(16) .HasColumnName("created_at") .HasColumnType("TIMESTAMP") .IsRequired() .HasDefaultValueSql("CURRENT_TIMESTAMP") .HasComment("교환 주문 시작 시간"); // 완료 시간 (TIMESTAMP?) - Nullable builder.Property(o => o.CompletedAt) .HasColumnOrder(17) .HasColumnName("completed_at") .HasColumnType("TIMESTAMP") .IsRequired(false) .HasComment("교환 주문 완료 시간"); } }