MemberConfiguration.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using Domain.Entities.Members;
  2. using Domain.Entities.Wallets;
  3. using Microsoft.EntityFrameworkCore;
  4. using Microsoft.EntityFrameworkCore.Metadata.Builders;
  5. namespace Infrastructure.Persistence.Configurations.Members;
  6. public sealed class MemberConfiguration : IEntityTypeConfiguration<Member>
  7. {
  8. public void Configure(EntityTypeBuilder<Member> builder)
  9. {
  10. builder.HasIndex(x => x.SID).IsUnique();
  11. builder.HasIndex(x => x.Email).IsUnique();
  12. builder.HasIndex(x => x.Name).IsUnique();
  13. builder.HasIndex(x => x.FullName);
  14. builder.HasIndex(x => x.Gender);
  15. builder.HasIndex(x => x.Phone);
  16. builder.HasIndex(x => x.IsEmailVerified);
  17. builder.HasIndex(x => x.IsAuthCertified);
  18. builder.HasIndex(x => x.IsDenied);
  19. builder.HasIndex(x => x.IsAdmin);
  20. builder.HasIndex(x => x.IsWithdraw);
  21. builder.HasIndex(x => x.IsCreator);
  22. builder.HasIndex(x => x.CreatedAt);
  23. builder.HasIndex(x => x.DeletedAt);
  24. // 회원 등급
  25. builder.HasOne(x => x.MemberGrade).WithMany().HasForeignKey(x => x.MemberGradeID).OnDelete(DeleteBehavior.SetNull);
  26. // 회원 알림/승인 정보
  27. builder.HasOne(x => x.MemberApprove).WithOne(x => x.Member).HasForeignKey<MemberApprove>(x => x.MemberID).OnDelete(DeleteBehavior.Cascade);
  28. // 회원 활동 집계 정보
  29. builder.HasOne(x => x.MemberStats).WithOne(x => x.Member).HasForeignKey<MemberStats>(x => x.MemberID).OnDelete(DeleteBehavior.Cascade);
  30. // 지갑 정보
  31. builder.HasOne(x => x.Wallet).WithOne(x => x.Member).HasForeignKey<Wallet>(x => x.MemberID).OnDelete(DeleteBehavior.Cascade);
  32. // 채널 정보
  33. builder.HasOne(x => x.Channel).WithOne(x => x.Member).HasForeignKey<Channel>(x => x.MemberID).OnDelete(DeleteBehavior.Cascade);
  34. builder.ToTable(nameof(Member), x => x.HasComment("회원 정보"));
  35. builder.HasKey(x => x.ID);
  36. builder.Property(x => x.ID).ValueGeneratedOnAdd().HasComment("PK");
  37. builder.Property(x => x.MemberGradeID).HasComment("회원등급 PK");
  38. builder.Property(x => x.SID).HasMaxLength(20).IsRequired().HasComment("SID");
  39. builder.Property(x => x.Email).HasMaxLength(60).IsRequired().HasComment("이메일");
  40. builder.Property(x => x.Name).HasMaxLength(20).HasComment("별명");
  41. builder.Property(x => x.FullName).HasMaxLength(40).HasComment("본명");
  42. builder.Property(x => x.FirstName).HasMaxLength(20).HasComment("본명(성)");
  43. builder.Property(x => x.LastName).HasMaxLength(40).HasComment("본명(이름)");
  44. builder.Property(x => x.Password).HasMaxLength(255).HasComment("비밀번호");
  45. builder.Property(x => x.Intro).HasMaxLength(1000).HasComment("자기소개");
  46. builder.Property(x => x.Summary).HasMaxLength(50).HasComment("한마디");
  47. builder.Property(x => x.Phone).HasMaxLength(15).HasComment("연락처");
  48. builder.Property(x => x.Birthday).HasComment("생년월일");
  49. builder.Property(x => x.Gender).HasConversion<int?>().HasComment("성별");
  50. builder.Property(x => x.Thunmbnail).HasMaxLength(255).HasComment("썸네일");
  51. builder.Property(x => x.Icon).HasMaxLength(255).HasComment("아이콘");
  52. builder.Property(x => x.IsEmailVerified).IsRequired().HasComment("이메일 인증 여부");
  53. builder.Property(x => x.IsAuthCertified).IsRequired().HasComment("본인 인증 여부");
  54. builder.Property(x => x.IsDenied).IsRequired().HasComment("차단 여부");
  55. builder.Property(x => x.IsAdmin).IsRequired().HasComment("운영진 여부");
  56. builder.Property(x => x.IsWithdraw).IsRequired().HasComment("탈퇴 여부");
  57. builder.Property(x => x.IsCreator).IsRequired().HasComment("크리에이터 여부");
  58. builder.Property(x => x.DeviceInfo).HasMaxLength(400).HasComment("로그인 단말기 정보");
  59. builder.Property(x => x.SignupIP).HasMaxLength(15).HasComment("회원가입 시 IP");
  60. builder.Property(x => x.LastLoginIp).HasMaxLength(15).HasComment("마지막 로그인 IP");
  61. builder.Property(x => x.IpAddress).HasMaxLength(45).HasComment("IP Address");
  62. builder.Property(x => x.UserAgent).HasMaxLength(255).HasComment("User-agent");
  63. builder.Property(x => x.LastLoginAt).HasComment("마지막 로그인 일시");
  64. builder.Property(x => x.LastEmailChangedAt).HasComment("마지막 이메일 변경 일시");
  65. builder.Property(x => x.LastNameChangedAt).HasComment("마지막 별명 변경 일시");
  66. builder.Property(x => x.LastSummaryChangedAt).HasComment("마지막 한마디 변경 일시");
  67. builder.Property(x => x.LastIntroChangedAt).HasComment("마지막 자기소개 변경 일시");
  68. builder.Property(x => x.EmailVerifiedAt).HasComment("이메일 인증 일시");
  69. builder.Property(x => x.AuthCertifiedAt).HasComment("본인인증 일시");
  70. builder.Property(x => x.PasswordUpdatedAt).HasComment("비밀번호 변경 일시");
  71. builder.Property(x => x.CreatedAt).IsRequired().HasComment("가입 일시");
  72. builder.Property(x => x.UpdatedAt).HasComment("수정 일시");
  73. builder.Property(x => x.DeletedAt).HasComment("탈퇴 일시");
  74. builder.Property(x => x.DeniedAt).HasComment("차단 일시");
  75. }
  76. }