namespace qtc_api.Data { public class DataContext : DbContext { public DataContext(DbContextOptions options) : base(options) { } public DbSet Users { get; set; } public DbSet Rooms { get; set; } public DbSet ValidRefreshTokens { get; set; } public DbSet Contacts { get; set; } public DbSet OwnedStoreItems { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) { var dbProvider = Environment.GetEnvironmentVariable("DB_PROVIDER"); var connectionString = Environment.GetEnvironmentVariable("DB_CONNECTION_STRING"); if (dbProvider != null && connectionString != null) { switch (dbProvider) { case "MySQL": options.UseMySQL(connectionString); break; case "SQLite": options.UseSqlite(connectionString); break; default: throw new Exception("Unsupported Database Provider. Please Check 'DB_PROVIDER' Environment Variable."); } } else throw new Exception("Cannot Find Environment Variables 'DB_PROVIDER' And 'DB_CONNECTION_STRING'. Please Check Environment."); } protected override void OnModelCreating(ModelBuilder builder) { // Users builder.Entity().HasMany(e => e.ContactsList); builder.Entity().HasMany(e => e.ContactsMade); builder.Entity().HasMany(e => e.OwnedStoreItems); builder.Entity() .Property("_tagString") .HasColumnName("Tags"); // Rooms (no relations) builder.Entity(); // Refresh Tokens builder.Entity().HasOne(e => e.User) .WithMany(e => e.RefreshTokens) .HasForeignKey(e => e.UserID); // Contacts builder.Entity().HasOne(e => e.Owner) .WithMany(e => e.ContactsMade) .HasForeignKey(e => e.OwnerId); builder.Entity().HasOne(e => e.User) .WithMany(e => e.ContactsList) .HasForeignKey(e => e.UserId); // Purchased Store Items builder.Entity().HasOne(e => e.User) .WithMany(e => e.OwnedStoreItems) .HasForeignKey(e => e.UserId); } } }