using Femto.Modules.Blog.Domain.Posts;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace Femto.Modules.Blog.Application.Configurations;

internal class PostConfiguration : IEntityTypeConfiguration<Post>
{
    public void Configure(EntityTypeBuilder<Post> table)
    {
        table.ToTable("post");
        table.OwnsMany(post => post.Media).WithOwner();
        table.OwnsMany(
            post => post.Reactions,
            reactions =>
            {
                reactions.WithOwner().HasForeignKey(r => r.PostId);
                reactions.HasKey(r => new
                {
                    r.PostId,
                    r.AuthorId,
                    r.Emoji,
                });
            }
        );

        table.OwnsMany(p => p.Comments).WithOwner();

        table.Property<string>("PossibleReactionsJson").HasColumnName("possible_reactions");

        table.Ignore(e => e.PossibleReactions);
    }
}
