Add jobs
This commit is contained in:
@@ -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 =>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user