using MagicCarpetContracts.Infrastructure; using MagicCarpetDatabase.Models; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MagicCarpetDatabase; internal class MagicCarpetDbContext(IConfigurationDatabase configurationDatabase) : DbContext { private readonly IConfigurationDatabase? _configurationDatabase = configurationDatabase; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseNpgsql(_configurationDatabase?.ConnectionString, o => o.SetPostgresVersion(12, 2)); base.OnConfiguring(optionsBuilder); } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity().HasIndex(x => x.PhoneNumber).IsUnique(); modelBuilder.Entity().HasIndex(x => x.TourName).IsUnique(); modelBuilder.Entity() .HasIndex(e => new { e.PostName, e.IsActual }) .IsUnique() .HasFilter($"\"{nameof(Post.IsActual)}\" = TRUE"); modelBuilder.Entity() .HasIndex(e => new { e.PostId, e.IsActual }) .IsUnique() .HasFilter($"\"{nameof(Post.IsActual)}\" = TRUE"); modelBuilder.Entity().HasKey(x => new { x.SaleId, x.TourId }); } public DbSet Clients { get; set; } public DbSet Posts { get; set; } public DbSet Tours { get; set; } public DbSet TourHistories { get; set; } public DbSet Salaries { get; set; } public DbSet Sales { get; set; } public DbSet SaleTours { get; set; } public DbSet Employees { get; set; } }