using System.Text.Json; using Bogus; using Commerce.Contracts.DTOs; using Commerce.Domain.Entities; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace Commerce.Domain; public class Context : DbContext { public DbSet Products { get; set; } public DbSet Categories { get; set; } public Context(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); if (Database.IsNpgsql()) { modelBuilder.Entity(entity => { entity.OwnsMany(e => e.Translations, b => { b.ToJson(); b.OwnsOne(t => t.Info, i => { i.OwnsMany(ti => ti.TechnicalDetails); }); }); }); modelBuilder.Entity(entity => { entity.OwnsMany(e => e.Translations, b => { b.ToJson(); b.OwnsOne(t => t.Info, i => { i.OwnsMany(ti => ti.TechnicalDetails); }); }); }); } else { var productTranslationsConverter = new Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter, string>( v => JsonSerializer.Serialize(v, (JsonSerializerOptions?)null), v => JsonSerializer.Deserialize>(v, (JsonSerializerOptions?)null) ?? new List()); var categoryTranslationsConverter = new Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter, string>( v => JsonSerializer.Serialize(v, (JsonSerializerOptions?)null), v => JsonSerializer.Deserialize>(v, (JsonSerializerOptions?)null) ?? new List()); modelBuilder.Entity(entity => { entity.Property(e => e.Translations).HasConversion(productTranslationsConverter); }); modelBuilder.Entity(entity => { entity.Property(e => e.Translations).HasConversion(categoryTranslationsConverter); }); } } }