refactor(infra): move database path logic into app context
This commit is contained in:
@@ -1,21 +1,25 @@
|
|||||||
namespace FiscalOS.Infra.Data;
|
namespace FiscalOS.Infra.Data;
|
||||||
|
|
||||||
public sealed class AppDbContext(IOptions<AppDbContextOptions> ctxOptions) : DbContext
|
public sealed class AppDbContext(
|
||||||
|
IOptions<AppDbContextOptions> ctxOptions,
|
||||||
|
IFileSystem fileSystem
|
||||||
|
) : DbContext
|
||||||
{
|
{
|
||||||
private const string DataSourceKey = "Data Source=";
|
private const string DataSourceKey = "Data Source=";
|
||||||
private readonly AppDbContextOptions _ctxOptions = ctxOptions.Value;
|
private readonly AppDbContextOptions _ctxOptions = ctxOptions.Value;
|
||||||
|
private readonly IFileSystem _fileSystem = fileSystem;
|
||||||
|
|
||||||
public DbSet<User> Users => Set<User>();
|
public DbSet<User> Users => Set<User>();
|
||||||
public DbSet<RefreshToken> RefreshTokens => Set<RefreshToken>();
|
public DbSet<RefreshToken> RefreshTokens => Set<RefreshToken>();
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
var dbPath = _ctxOptions.GetFullyQualifiedDatabasePath();
|
var dbPath = _fileSystem.Path.GetFullPath(_ctxOptions.DatabaseFilePath, AppContext.BaseDirectory);
|
||||||
var dbDirectory = Path.GetDirectoryName(dbPath) ?? throw new InvalidOperationException("Database directory path could not be determined.");
|
var dbDirectory = _fileSystem.Path.GetDirectoryName(dbPath) ?? throw new InvalidOperationException("Database directory path could not be determined.");
|
||||||
|
|
||||||
if (Directory.Exists(dbDirectory) is false)
|
if (_fileSystem.Directory.Exists(dbDirectory) is false)
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(dbDirectory);
|
_fileSystem.Directory.CreateDirectory(dbDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
var connectionString = $"{DataSourceKey}{dbPath}";
|
var connectionString = $"{DataSourceKey}{dbPath}";
|
||||||
|
|||||||
@@ -3,11 +3,6 @@ namespace FiscalOS.Infra.Data;
|
|||||||
public sealed record AppDbContextOptions
|
public sealed record AppDbContextOptions
|
||||||
{
|
{
|
||||||
public string DatabaseFilePath { get; init; } = string.Empty;
|
public string DatabaseFilePath { get; init; } = string.Empty;
|
||||||
|
|
||||||
public string GetFullyQualifiedDatabasePath()
|
|
||||||
{
|
|
||||||
return Path.GetFullPath(DatabaseFilePath, AppContext.BaseDirectory);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed record AppDbContextOptionsSetup : IConfigureOptions<AppDbContextOptions>
|
public sealed record AppDbContextOptionsSetup : IConfigureOptions<AppDbContextOptions>
|
||||||
|
|||||||
Reference in New Issue
Block a user