using Microsoft.EntityFrameworkCore; using QuestShare.Common.API; using Serilog.Events; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Diagnostics.CodeAnalysis; namespace QuestShare.Server.Models { public class QuestShareContext : DbContext { public QuestShareContext() { // Database.EnsureCreated(); } public DbSet Sessions { get; set; } = null!; public DbSet Clients { get; set; } = null!; public DbSet Bans { get; set; } = null!; public DbSet SessionMembers { get; set; } = null!; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseLazyLoadingProxies() .UseNpgsql(Environment.GetEnvironmentVariable("QUESTSHARE_DATABASE")); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().ToTable("Clients"); modelBuilder.Entity().Property(a => a.Created).HasDefaultValueSql("current_timestamp"); modelBuilder.Entity().Property(a => a.LastUpdated).HasDefaultValueSql("current_timestamp").ValueGeneratedOnAddOrUpdate(); modelBuilder.Entity().Property(a => a.KnownShareCodes).HasConversion( v => string.Join(',', v), v => v.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList() ); new SessionsConfiguration().Configure(modelBuilder.Entity()); new ClientSessionConfiguration().Configure(modelBuilder.Entity()); modelBuilder.Entity().ToTable("Bans"); } } }