Files
Finlytic/FinlyticTechnicalAnalysis/Database/TechnicalAnalysisDbContext.cs
T

49 lines
1.8 KiB
C#

using FinlyticCore.Database;
using FinlyticCore.Entities.Settings;
using FinlyticTechnicalAnalysis.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
namespace FinlyticTechnicalAnalysis.Database;
public class TechnicalAnalysisDbContext : DbContext, ISettingsDbContext
{
public TechnicalAnalysisDbContext(DbContextOptions<TechnicalAnalysisDbContext> options) : base(options)
{
}
public DbSet<SettingEntity> DynamicSettings => Set<SettingEntity>();
public DbSet<MarketCandleEntity> MarketCandles => Set<MarketCandleEntity>();
public DbSet<MacroDataEntity> MacroData => Set<MacroDataEntity>();
public DbSet<CachedAnalysisEntity> CachedAnalyses => Set<CachedAnalysisEntity>();
public DbSet<TaSettingsEntity> Settings => Set<TaSettingsEntity>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<SettingEntity>(entity =>
{
entity.HasKey(e => e.Id);
entity.HasIndex(e => e.Key).IsUnique();
});
modelBuilder.Entity<MarketCandleEntity>()
.HasIndex(c => new { c.Symbol, c.Interval, c.Timestamp })
.IsUnique();
modelBuilder.Entity<CachedAnalysisEntity>()
.HasIndex(c => c.Isin);
}
}
public class TechnicalAnalysisDbContextFactory : IDesignTimeDbContextFactory<TechnicalAnalysisDbContext>
{
public TechnicalAnalysisDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<TechnicalAnalysisDbContext>();
optionsBuilder.UseNpgsql("Host=localhost;Database=ta;Username=postgres;Password=postgres");
return new TechnicalAnalysisDbContext(optionsBuilder.Options);
}
}