using FindAndDrive.Domain.Models.DTO; using FindAndDrive.Domain.Models.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace FindAndDrive.Persistence.EntityConfigurations; public class RoleConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("Roles").HasKey(k => k.RoleId); builder.HasMany(w => w.ApiKeys) .WithOne(w => w.Role) .HasForeignKey(w => w.RoleId); var valueConverter = new ValueConverter, string>( v => EnumConverter.ValuesToString(v), v => EnumConverter.ValuesFromString(v)); var valueComparer = new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (i, permissions) => HashCode.Combine(i, permissions.GetHashCode()))); builder.Property(p => p.Permissions) .HasConversion(valueConverter, valueComparer); } }