using System; using Kyoo.Models; using Microsoft.EntityFrameworkCore; using Npgsql; namespace Kyoo.Postgresql { /// /// A postgresql implementation of . /// public class PostgresContext : DatabaseContext { /// /// The connection string to use. /// private readonly string _connection; /// /// Is this instance in debug mode? /// private readonly bool _debugMode; /// /// A basic constructor that set default values (query tracker behaviors, mapping enums...) /// public PostgresContext() { NpgsqlConnection.GlobalTypeMapper.MapEnum(); NpgsqlConnection.GlobalTypeMapper.MapEnum(); NpgsqlConnection.GlobalTypeMapper.MapEnum(); } /// /// A basic constructor that set default values (query tracker behaviors, mapping enums...) /// /// The connection string to use /// Is this instance in debug mode? public PostgresContext(string connection, bool debugMode) { _connection = connection; _debugMode = debugMode; } /// /// Set connection information for this database context /// /// An option builder to fill. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseNpgsql(_connection); if (_debugMode) optionsBuilder.EnableDetailedErrors() .EnableSensitiveDataLogging(); } /// /// Set database parameters to support every types of Kyoo. /// /// The database's model builder. protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasPostgresEnum(); modelBuilder.HasPostgresEnum(); modelBuilder.HasPostgresEnum(); base.OnModelCreating(modelBuilder); } /// protected override bool IsDuplicateException(Exception ex) { return ex.InnerException is PostgresException {SqlState: PostgresErrorCodes.UniqueViolation}; } } }