using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using OnlyPrompt.Backend.Database.Models; namespace OnlyPrompt.Backend.Database { public class OnlyPromptContext : DbContext { public DbSet Users { get; set; } public DbSet UserProfiles { get; set; } public DbSet Categories { get; set; } public DbSet Prompts { get; set; } public DbSet SubscriptionTiers { get; set; } public DbSet Subscriptions { get; set; } public DbSet Reviews { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); if(optionsBuilder.IsConfigured == false) { optionsBuilder.UseNpgsql(); optionsBuilder.UseLazyLoadingProxies(); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity(entity => { entity.HasOne(e => e.Profile) .WithOne(p => p.User) .HasForeignKey(p => p.Id); }); modelBuilder.Entity(entity => { entity.HasOne(e => e.Subscriber) .WithMany(s => s.Subscriptions) .HasForeignKey(e => e.SubscriberId) .OnDelete(DeleteBehavior.Cascade); entity.HasOne(e => e.SubscribedTo) .WithMany(c => c.Subscribers) .HasForeignKey(e => e.SubscribedToId) .OnDelete(DeleteBehavior.Cascade); entity.HasOne(e => e.SubscriptionTier) .WithMany(t => t.Subscriptions) .HasForeignKey(e => e.SubscriptionTierId) .OnDelete(DeleteBehavior.SetNull); }); } } }