add postgres

This commit is contained in:
Alex Bezdieniezhnykh
2024-11-12 15:57:36 +02:00
parent 85139b4fd2
commit 2336c15aa4
15 changed files with 224 additions and 78 deletions
+23 -14
View File
@@ -1,5 +1,7 @@
using System.Diagnostics;
using Azaion.Common.Configs;
using LinqToDB;
using Microsoft.Extensions.Options;
namespace Azaion.Common.Database;
@@ -7,42 +9,49 @@ public interface IDbFactory
{
Task<T> Run<T>(Func<AzaionDb, Task<T>> func);
Task Run(Func<AzaionDb, Task> func);
T Run<T>(Func<AzaionDb, T> func);
Task RunAdmin(Func<AzaionDb, Task> func);
}
public class DbFactory : IDbFactory
{
private readonly DataOptions _dataOptions;
private readonly DataOptions _dataOptionsAdmin;
public DbFactory(string connectionString, bool useTracing = true, bool msSql = false)
public DbFactory(IOptions<ConnectionStrings> connectionString)
{
if (string.IsNullOrEmpty(connectionString))
throw new ArgumentException("Empty connectionString", nameof(connectionString));
_dataOptions = LoadOptions(connectionString.Value.AzaionDb);
_dataOptionsAdmin = LoadOptions(connectionString.Value.AzaionDbAdmin);
}
_dataOptions = new DataOptions()
.UsePostgreSQL(connectionString)
private DataOptions LoadOptions(string connStr)
{
if (string.IsNullOrEmpty(connStr))
throw new ArgumentException($"Empty connection string in config!");
var dataOptions = new DataOptions()
.UsePostgreSQL(connStr)
.UseMappingSchema(AzaionDbSchemaHolder.MappingSchema);
if (useTracing)
_ = _dataOptions.UseTracing(TraceLevel.Info, t => Console.WriteLine(t.SqlText));
_ = dataOptions.UseTracing(TraceLevel.Info, t => Console.WriteLine(t.SqlText));
return dataOptions;
}
public async Task<T> Run<T>(Func<AzaionDb, Task<T>> func)
{
await using var db = new AzaionDb(_dataOptions);
return await func(db);
}
public async Task Run(Func<AzaionDb, Task> func)
{
await using var db = new AzaionDb(_dataOptions);
await func(db);
}
public T Run<T>(Func<AzaionDb, T> func)
public async Task RunAdmin(Func<AzaionDb, Task> func)
{
using var db = new AzaionDb(_dataOptions);
return func(db);
await using var db = new AzaionDb(_dataOptionsAdmin);
await func(db);
}
}