using Microsoft.EntityFrameworkCore; using LittleShop.Models; namespace LittleShop.Data; public class LittleShopContext : DbContext { public LittleShopContext(DbContextOptions options) : base(options) { } public DbSet Users { get; set; } public DbSet Categories { get; set; } public DbSet Products { get; set; } public DbSet ProductPhotos { get; set; } public DbSet Orders { get; set; } public DbSet OrderItems { get; set; } public DbSet CryptoPayments { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // User entity modelBuilder.Entity(entity => { entity.HasIndex(e => e.Username).IsUnique(); }); // Category entity modelBuilder.Entity(entity => { entity.HasMany(c => c.Products) .WithOne(p => p.Category) .HasForeignKey(p => p.CategoryId) .OnDelete(DeleteBehavior.Restrict); }); // Product entity modelBuilder.Entity(entity => { entity.HasMany(p => p.Photos) .WithOne(pp => pp.Product) .HasForeignKey(pp => pp.ProductId) .OnDelete(DeleteBehavior.Cascade); entity.HasMany(p => p.OrderItems) .WithOne(oi => oi.Product) .HasForeignKey(oi => oi.ProductId) .OnDelete(DeleteBehavior.Restrict); }); // Order entity modelBuilder.Entity(entity => { entity.HasMany(o => o.OrderItems) .WithOne(oi => oi.Order) .HasForeignKey(oi => oi.OrderId) .OnDelete(DeleteBehavior.Cascade); entity.HasMany(o => o.CryptoPayments) .WithOne(cp => cp.Order) .HasForeignKey(cp => cp.OrderId) .OnDelete(DeleteBehavior.Cascade); entity.HasIndex(e => e.IdentityReference); }); // OrderItem entity modelBuilder.Entity(entity => { entity.HasKey(oi => oi.Id); }); // CryptoPayment entity modelBuilder.Entity(entity => { entity.HasIndex(e => e.BTCPayInvoiceId); entity.HasIndex(e => e.WalletAddress); }); } }