using BlueLaminate.EFCore.Configurations; using BlueLaminate.EFCore.Entities; using Microsoft.EntityFrameworkCore; namespace BlueLaminate.EFCore.Data; public class SkinTrackerDbContext : DbContext { static SkinTrackerDbContext() { // Store and read all timestamps as UTC (timestamptz). Required so that // DateTimeOffset properties round-trip correctly with Npgsql. AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", false); } public SkinTrackerDbContext(DbContextOptions options) : base(options) { } public DbSet Weapons => Set(); public DbSet ScrapeRuns => Set(); public DbSet Collections => Set(); public DbSet Skins => Set(); public DbSet SkinConditions => Set(); public DbSet SkinSweeps => Set(); public DbSet SkinConditionSweeps => Set(); public DbSet SteamUsers => Set(); public DbSet SkinInstances => Set(); public DbSet InventoryItems => Set(); public DbSet Trades => Set(); public DbSet TradeItems => Set(); public DbSet PriceHistories => Set(); public DbSet Listings => Set(); public DbSet CsMoneyListings => Set(); public DbSet SkinLandListings => Set(); /// Read-only cross-market view UNIONing the per-market listing tables. public DbSet MarketListings => Set(); /// The PostgreSQL schema that owns all of this context's tables. public const string Schema = "skintracker"; protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema(Schema); modelBuilder.ApplyConfiguration(new WeaponConfiguration()); modelBuilder.ApplyConfiguration(new ScrapeRunConfiguration()); modelBuilder.ApplyConfiguration(new CollectionConfiguration()); modelBuilder.ApplyConfiguration(new SkinConfiguration()); modelBuilder.ApplyConfiguration(new SkinConditionConfiguration()); modelBuilder.ApplyConfiguration(new SkinSweepConfiguration()); modelBuilder.ApplyConfiguration(new SkinConditionSweepConfiguration()); modelBuilder.ApplyConfiguration(new SteamUserConfiguration()); modelBuilder.ApplyConfiguration(new SkinInstanceConfiguration()); modelBuilder.ApplyConfiguration(new InventoryItemConfiguration()); modelBuilder.ApplyConfiguration(new TradeConfiguration()); modelBuilder.ApplyConfiguration(new TradeItemConfiguration()); modelBuilder.ApplyConfiguration(new PriceHistoryConfiguration()); modelBuilder.ApplyConfiguration(new ListingConfiguration()); modelBuilder.ApplyConfiguration(new CsMoneyListingConfiguration()); modelBuilder.ApplyConfiguration(new SkinLandListingConfiguration()); modelBuilder.ApplyConfiguration(new MarketListingConfiguration()); } }