PostCheerConfiguration.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132
  1. using Domain.Entities.Forum.Posts;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.EntityFrameworkCore.Metadata.Builders;
  4. namespace Infrastructure.Persistence.Configurations.Forum.Posts;
  5. public sealed class PostCheerConfiguration : IEntityTypeConfiguration<PostCheer>
  6. {
  7. public void Configure(EntityTypeBuilder<PostCheer> builder)
  8. {
  9. // 글 삭제 시 응원 원장은 감사 목적으로 보존 (NoAction). 회원 삭제와의 다중 캐스케이드 경로 충돌도 회피.
  10. builder.HasOne(x => x.Post).WithMany().HasForeignKey(x => x.PostID).OnDelete(DeleteBehavior.NoAction);
  11. builder.HasOne(x => x.FromMember).WithMany().HasForeignKey(x => x.FromMemberID).OnDelete(DeleteBehavior.NoAction);
  12. builder.HasOne(x => x.ToMember).WithMany().HasForeignKey(x => x.ToMemberID).OnDelete(DeleteBehavior.NoAction);
  13. builder.ToTable(nameof(PostCheer), x => x.HasComment("분석글 응원(Cheer) — D3 M4"));
  14. builder.HasKey(x => x.ID);
  15. builder.Property(x => x.ID).ValueGeneratedOnAdd().HasComment("PK");
  16. builder.Property(x => x.PostID).IsRequired().HasComment("응원 대상 게시글 ID");
  17. builder.Property(x => x.FromMemberID).IsRequired().HasComment("응원 발신자 회원 ID");
  18. builder.Property(x => x.ToMemberID).IsRequired().HasComment("응원 수신자(글 작성자) 회원 ID");
  19. builder.Property(x => x.Amount).IsRequired().HasComment("총 응원 금액");
  20. builder.Property(x => x.FeeAmount).IsRequired().HasComment("플랫폼 수수료(소각분)");
  21. builder.Property(x => x.NetAmount).IsRequired().HasComment("작성자 수령 순액(Reward 적립)");
  22. builder.Property(x => x.Message).HasMaxLength(100).HasComment("응원 한마디");
  23. builder.Property(x => x.CreatedAt).IsRequired().HasComment("응원 일시");
  24. builder.HasIndex(x => x.PostID);
  25. builder.HasIndex(x => new { x.ToMemberID, x.CreatedAt });
  26. builder.HasIndex(x => new { x.FromMemberID, x.CreatedAt });
  27. }
  28. }