using Microsoft.EntityFrameworkCore; using Moonlight.ApiServer.Configuration; using MoonlightServers.ApiServer.Database.Entities; using MoonlightServers.ApiServer.Models; namespace MoonlightServers.ApiServer.Database; public class ServersDataContext : DbContext { public DbSet Allocations { get; set; } public DbSet Nodes { get; set; } public DbSet Servers { get; set; } public DbSet ServerBackups { get; set; } public DbSet ServerShares { get; set; } public DbSet ServerVariables { get; set; } public DbSet Stars { get; set; } public DbSet StarDockerImages { get; set; } public DbSet StarVariables { get; set; } private readonly AppConfiguration Configuration; private readonly string Schema = "servers"; public ServersDataContext(AppConfiguration configuration) { Configuration = configuration; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if(optionsBuilder.IsConfigured) return; var database = Configuration.Database; var connectionString = $"Host={database.Host};" + $"Port={database.Port};" + $"Database={database.Database};" + $"Username={database.Username};" + $"Password={database.Password}"; optionsBuilder.UseNpgsql(connectionString, builder => { builder.MigrationsHistoryTable("MigrationsHistory", Schema); }); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Model.SetDefaultSchema(Schema); base.OnModelCreating(modelBuilder); #region Shares modelBuilder.Ignore(); modelBuilder.Ignore(); modelBuilder.Entity(builder => { builder.OwnsOne(x => x.Content, navigationBuilder => { navigationBuilder.ToJson(); navigationBuilder.OwnsMany(x => x.Permissions); }); }); #endregion } }