using Domain.Entities.Members; using Domain.Entities.Wallets; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Infrastructure.Persistence.Configurations.Members; public sealed class MemberConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasIndex(x => x.SID).IsUnique(); builder.HasIndex(x => x.Email).IsUnique(); builder.HasIndex(x => x.Name).IsUnique(); builder.HasIndex(x => x.FullName); builder.HasIndex(x => x.Gender); builder.HasIndex(x => x.Phone); builder.HasIndex(x => x.IsEmailVerified); builder.HasIndex(x => x.IsAuthCertified); builder.HasIndex(x => x.IsDenied); builder.HasIndex(x => x.IsAdmin); builder.HasIndex(x => x.IsWithdraw); builder.HasIndex(x => x.IsCreator); builder.HasIndex(x => x.CreatedAt); builder.HasIndex(x => x.DeletedAt); // ȸ¿ø µî±Þ builder.HasOne(x => x.MemberGrade).WithMany().HasForeignKey(x => x.MemberGradeID).OnDelete(DeleteBehavior.SetNull); // ȸ¿ø ¾Ë¸²/½ÂÀÎ Á¤º¸ builder.HasOne(x => x.MemberApprove).WithOne(x => x.Member).HasForeignKey(x => x.MemberID).OnDelete(DeleteBehavior.Cascade); // ȸ¿ø Ȱµ¿ Áý°è Á¤º¸ builder.HasOne(x => x.MemberStats).WithOne(x => x.Member).HasForeignKey(x => x.MemberID).OnDelete(DeleteBehavior.Cascade); // Áö°© Á¤º¸ builder.HasOne(x => x.Wallet).WithOne(x => x.Member).HasForeignKey(x => x.MemberID).OnDelete(DeleteBehavior.Cascade); // ä³Î Á¤º¸ builder.HasOne(x => x.Channel).WithOne(x => x.Member).HasForeignKey(x => x.MemberID).OnDelete(DeleteBehavior.Cascade); builder.ToTable(nameof(Member), x => x.HasComment("ȸ¿ø Á¤º¸")); builder.HasKey(x => x.ID); builder.Property(x => x.ID).ValueGeneratedOnAdd().HasComment("PK"); builder.Property(x => x.MemberGradeID).HasComment("ȸ¿øµî±Þ PK"); builder.Property(x => x.SID).HasMaxLength(20).IsRequired().HasComment("SID"); builder.Property(x => x.Email).HasMaxLength(60).IsRequired().HasComment("À̸ÞÀÏ"); builder.Property(x => x.Name).HasMaxLength(20).HasComment("º°¸í"); builder.Property(x => x.FullName).HasMaxLength(40).HasComment("º»¸í"); builder.Property(x => x.FirstName).HasMaxLength(20).HasComment("º»¸í(¼º)"); builder.Property(x => x.LastName).HasMaxLength(40).HasComment("º»¸í(À̸§)"); builder.Property(x => x.Password).HasMaxLength(255).HasComment("ºñ¹Ð¹øÈ£"); builder.Property(x => x.Intro).HasMaxLength(1000).HasComment("ÀÚ±â¼Ò°³"); builder.Property(x => x.Summary).HasMaxLength(50).HasComment("ÇѸ¶µð"); builder.Property(x => x.Phone).HasMaxLength(15).HasComment("¿¬¶ôó"); builder.Property(x => x.Birthday).HasComment("»ý³â¿ùÀÏ"); builder.Property(x => x.Gender).HasConversion().HasComment("¼ºº°"); builder.Property(x => x.Thumb).HasMaxLength(255).HasComment("½æ³×ÀÏ"); builder.Property(x => x.Icon).HasMaxLength(255).HasComment("¾ÆÀÌÄÜ"); builder.Property(x => x.IsEmailVerified).IsRequired().HasComment("À̸ÞÀÏ ÀÎÁõ ¿©ºÎ"); builder.Property(x => x.IsAuthCertified).IsRequired().HasComment("º»ÀÎ ÀÎÁõ ¿©ºÎ"); builder.Property(x => x.IsDenied).IsRequired().HasComment("Â÷´Ü ¿©ºÎ"); builder.Property(x => x.IsAdmin).IsRequired().HasComment("¿î¿µÁø ¿©ºÎ"); builder.Property(x => x.IsWithdraw).IsRequired().HasComment("Å»Åð ¿©ºÎ"); builder.Property(x => x.IsCreator).IsRequired().HasComment("Å©¸®¿¡ÀÌÅÍ ¿©ºÎ"); builder.Property(x => x.DeviceInfo).HasMaxLength(400).HasComment("·Î±×ÀÎ ´Ü¸»±â Á¤º¸"); builder.Property(x => x.SignupIP).HasMaxLength(15).HasComment("ȸ¿ø°¡ÀÔ ½Ã IP"); builder.Property(x => x.LastLoginIp).HasMaxLength(15).HasComment("¸¶Áö¸· ·Î±×ÀÎ IP"); builder.Property(x => x.IpAddress).HasMaxLength(45).HasComment("IP Address"); builder.Property(x => x.UserAgent).HasMaxLength(255).HasComment("User-agent"); builder.Property(x => x.LastLoginAt).HasComment("¸¶Áö¸· ·Î±×ÀÎ ÀϽÃ"); builder.Property(x => x.LastEmailChangedAt).HasComment("¸¶Áö¸· À̸ÞÀÏ º¯°æ ÀϽÃ"); builder.Property(x => x.LastNameChangedAt).HasComment("¸¶Áö¸· º°¸í º¯°æ ÀϽÃ"); builder.Property(x => x.LastSummaryChangedAt).HasComment("¸¶Áö¸· ÇѸ¶µð º¯°æ ÀϽÃ"); builder.Property(x => x.LastIntroChangedAt).HasComment("¸¶Áö¸· ÀÚ±â¼Ò°³ º¯°æ ÀϽÃ"); builder.Property(x => x.EmailVerifiedAt).HasComment("À̸ÞÀÏ ÀÎÁõ ÀϽÃ"); builder.Property(x => x.AuthCertifiedAt).HasComment("º»ÀÎÀÎÁõ ÀϽÃ"); builder.Property(x => x.PasswordUpdatedAt).HasComment("ºñ¹Ð¹øÈ£ º¯°æ ÀϽÃ"); builder.Property(x => x.CreatedAt).IsRequired().HasComment("°¡ÀÔ ÀϽÃ"); builder.Property(x => x.UpdatedAt).HasComment("¼öÁ¤ ÀϽÃ"); builder.Property(x => x.DeletedAt).HasComment("Å»Åð ÀϽÃ"); builder.Property(x => x.DeniedAt).HasComment("Â÷´Ü ÀϽÃ"); } }