using HN.Domain; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace HN.Infrastructure.EntityTypes { public sealed class LinkEntityType : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("links"); builder.HasKey(o => o.Id); builder.Property(o => o.Url).IsRequired().HasMaxLength(500); builder.Property(o => o.CreatedAt).IsRequired(); builder.HasIndex(o => o.Url).IsUnique(); builder.HasOne().WithMany().HasForeignKey(nameof(Link.CreatedBy)).IsRequired(); builder.OwnsMany(o => o.Votes, vote => { vote.ToTable("link_votes"); vote.WithOwner().HasForeignKey("LinkId"); vote.HasKey("LinkId", nameof(Link.CreatedBy)); vote.HasOne().WithMany().HasForeignKey(nameof(Vote.CreatedBy)).IsRequired(); vote.Property(o => o.Type).IsRequired(); vote.Property(o => o.CreatedAt).IsRequired(); }); } } }