using Koogle.Domain.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Koogle.Infrastructure.Data.Configurations; public class PersonExpenseConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("PersonExpenses"); builder.HasKey(x => x.Id); builder.Property(x => x.PersonId).IsRequired(); builder.Property(x => x.ExpenseId).IsRequired(); builder.Property(x => x.DayId).IsRequired(); builder.Property(x => x.Name) .HasMaxLength(200) .IsRequired(); builder.Property(x => x.PersonExpenseStatus) .HasConversion() .IsRequired(); builder.Property(x => x.ExpenseType) .HasConversion() .IsRequired(); builder.Property(x => x.Price) .HasPrecision(18, 2) .IsRequired(); builder.Property(x => x.AssignedById).IsRequired(); builder.HasOne(x => x.Person) .WithMany(x => x.Expenses) .HasForeignKey(x => x.PersonId) .OnDelete(DeleteBehavior.Cascade); builder.HasOne(x => x.Day) .WithMany() .HasForeignKey(x => x.DayId) .OnDelete(DeleteBehavior.Cascade); builder.HasOne(x => x.Expense) .WithMany() .HasForeignKey(x => x.ExpenseId) .OnDelete(DeleteBehavior.Restrict); builder.HasOne(x => x.Game) .WithMany() .HasForeignKey(x => x.GameId) .OnDelete(DeleteBehavior.SetNull); builder.HasIndex(x => new { x.PersonId, x.DayId }); builder.HasIndex(x => x.DayId); builder.HasIndex(x => x.GameId); builder.HasQueryFilter(x => !x.IsDeleted); } }