OrderRefundConfiguration.cs 1.7 KB

1234567891011121314151617181920212223242526272829
  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 OrderRefundConfiguration : IEntityTypeConfiguration<OrderRefund>
  6. {
  7. public void Configure(EntityTypeBuilder<OrderRefund> builder)
  8. {
  9. builder.ToTable(nameof(OrderRefund), t => t.HasComment("통합 환불 이력 (취소/반품/교환/환불)"));
  10. builder.HasKey(x => x.ID);
  11. builder.Property(x => x.OrderID).IsRequired();
  12. builder.Property(x => x.Type).HasConversion<int>().IsRequired().HasComment("유형 (1=Cancel, 2=Return, 3=Exchange, 4=Refund)");
  13. builder.Property(x => x.ReasonType).HasConversion<int>().IsRequired().HasDefaultValue(Domain.Entities.Store.ValueObject.RefundReasonType.Other).HasSentinel(default(Domain.Entities.Store.ValueObject.RefundReasonType)).HasComment("사유 유형 (1=ChangedMind, 2=OptionChange, 3=ProductDefect, 4=ProductInfoMismatch, 5=DeliveryDelay, 6=WrongDelivery, 7=Other)");
  14. builder.Property(x => x.Status).HasConversion<int>().IsRequired().HasComment("상태 (1=Requested, 2=Approved, 3=Rejected, 4=Completed)");
  15. builder.Property(x => x.Amount).IsRequired();
  16. builder.Property(x => x.Reason).HasMaxLength(500).IsRequired();
  17. builder.Property(x => x.AdminMemo).HasMaxLength(500);
  18. builder.Property(x => x.AdminUserId).HasMaxLength(450);
  19. builder.Property(x => x.AdminEmail).HasMaxLength(256);
  20. builder.Property(x => x.RequestedAt).IsRequired();
  21. builder.Property(x => x.ResolvedAt);
  22. builder.HasIndex(x => new { x.OrderID, x.Status });
  23. builder.HasIndex(x => x.Status);
  24. }
  25. }