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};
}
}
}