57 lines
1.7 KiB
C#
57 lines
1.7 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Diagnostics;
|
|
using OnlyPrompt.Backend.Database.Models;
|
|
|
|
namespace OnlyPrompt.Backend.Database
|
|
{
|
|
public class OnlyPromptContext : DbContext
|
|
{
|
|
public DbSet<UserModel> Users { get; set; }
|
|
public DbSet<UserProfileModel> UserProfiles { get; set; }
|
|
public DbSet<CategoryModel> Categories { get; set; }
|
|
public DbSet<PromptModel> Prompts { get; set; }
|
|
public DbSet<SubscriptionTierModel> SubscriptionTiers { get; set; }
|
|
public DbSet<SubscriptionModel> Subscriptions { get; set; }
|
|
public DbSet<ReviewModel> 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<UserModel>(entity =>
|
|
{
|
|
entity.HasOne(e => e.Profile)
|
|
.WithOne(p => p.User)
|
|
.HasForeignKey<UserProfileModel>(p => p.Id);
|
|
});
|
|
|
|
modelBuilder.Entity<SubscriptionModel>(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);
|
|
});
|
|
}
|
|
}
|
|
}
|