using HN.Domain; using HN.Infrastructure.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace HN.Infrastructure.EntityTypes { public sealed class CommentEntityType : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("comments"); builder.HasKey(o => o.Id); builder.HasOne() .WithMany() .HasForeignKey(o => o.LinkId) .IsRequired(); builder.Property(o => o.Content).IsRequired(); builder.Property(o => o.CreatedAt).IsRequired(); builder.HasOne().WithMany().HasForeignKey(nameof(Comment.CreatedBy)).IsRequired(); builder.OwnsMany(o => o.Votes, vote => { vote.ToTable("comment_votes"); vote.WithOwner().HasForeignKey("CommentId"); vote.HasKey("CommentId", nameof(Comment.CreatedBy)); vote.HasOne().WithMany().HasForeignKey(nameof(Vote.CreatedBy)).IsRequired(); vote.Property(o => o.Type).IsRequired(); vote.Property(o => o.CreatedAt).IsRequired(); }); } } }