Files
admin/Azaion.Common/Database/DbFactory.cs
T
Alex Bezdieniezhnykh 2336c15aa4 add postgres
2024-11-12 15:57:36 +02:00

58 lines
1.6 KiB
C#

using System.Diagnostics;
using Azaion.Common.Configs;
using LinqToDB;
using Microsoft.Extensions.Options;
namespace Azaion.Common.Database;
public interface IDbFactory
{
Task<T> Run<T>(Func<AzaionDb, Task<T>> func);
Task Run(Func<AzaionDb, Task> func);
Task RunAdmin(Func<AzaionDb, Task> func);
}
public class DbFactory : IDbFactory
{
private readonly DataOptions _dataOptions;
private readonly DataOptions _dataOptionsAdmin;
public DbFactory(IOptions<ConnectionStrings> connectionString)
{
_dataOptions = LoadOptions(connectionString.Value.AzaionDb);
_dataOptionsAdmin = LoadOptions(connectionString.Value.AzaionDbAdmin);
}
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);
_ = 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 async Task RunAdmin(Func<AzaionDb, Task> func)
{
await using var db = new AzaionDb(_dataOptionsAdmin);
await func(db);
}
}