This commit is contained in:
2025-11-09 02:08:31 +07:00
parent 1ed58d1a98
commit 7dba29c66f
57 changed files with 8362 additions and 359 deletions

View File

@@ -27,6 +27,7 @@ public class ManagingDbContext : DbContext
public DbSet<GeneticRequestEntity> GeneticRequests { get; set; }
public DbSet<BacktestEntity> Backtests { get; set; }
public DbSet<BundleBacktestRequestEntity> BundleBacktestRequests { get; set; }
public DbSet<JobEntity> Jobs { get; set; }
// Trading entities
public DbSet<ScenarioEntity> Scenarios { get; set; }
@@ -231,6 +232,45 @@ public class ManagingDbContext : DbContext
entity.HasIndex(e => new { e.UserId, e.Name, e.Version });
});
// Configure BacktestJob entity
modelBuilder.Entity<JobEntity>(entity =>
{
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).ValueGeneratedNever(); // GUIDs are generated by application
entity.Property(e => e.UserId).IsRequired();
entity.Property(e => e.Status).IsRequired();
entity.Property(e => e.JobType).IsRequired().HasDefaultValue(0); // 0 = Backtest
entity.Property(e => e.Priority).IsRequired().HasDefaultValue(0);
entity.Property(e => e.ConfigJson).IsRequired().HasColumnType("jsonb");
entity.Property(e => e.StartDate).IsRequired();
entity.Property(e => e.EndDate).IsRequired();
entity.Property(e => e.ProgressPercentage).IsRequired().HasDefaultValue(0);
entity.Property(e => e.AssignedWorkerId).HasMaxLength(255);
entity.Property(e => e.ResultJson).HasColumnType("jsonb");
entity.Property(e => e.ErrorMessage).HasColumnType("text");
entity.Property(e => e.RequestId).HasMaxLength(255);
entity.Property(e => e.GeneticRequestId).HasMaxLength(255);
entity.Property(e => e.CreatedAt).IsRequired();
// Indexes for efficient job claiming and queries
entity.HasIndex(e => new { e.Status, e.JobType, e.Priority, e.CreatedAt })
.HasDatabaseName("idx_status_jobtype_priority_created");
entity.HasIndex(e => e.BundleRequestId)
.HasDatabaseName("idx_bundle_request");
entity.HasIndex(e => new { e.AssignedWorkerId, e.Status })
.HasDatabaseName("idx_assigned_worker");
entity.HasIndex(e => new { e.UserId, e.Status })
.HasDatabaseName("idx_user_status");
entity.HasIndex(e => e.GeneticRequestId)
.HasDatabaseName("idx_genetic_request");
// Configure relationship with User
entity.HasOne(e => e.User)
.WithMany()
.HasForeignKey(e => e.UserId)
.OnDelete(DeleteBehavior.SetNull);
});
// Configure Scenario entity
modelBuilder.Entity<ScenarioEntity>(entity =>
{