feat(CUB-56): Agent State Database Migration

This commit is contained in:
cubecraft-agents[bot]
2026-04-26 10:18:06 +00:00
parent f490098af6
commit 7b7b070dac
15 changed files with 581 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
using ControlCenter.Api.Configurations;
using ControlCenter.Api.Entities;
using Microsoft.EntityFrameworkCore;
namespace ControlCenter.Api.Data;
/// <summary>
/// EF Core DbContext for the Control Center database.
/// All table and column names use snake_case via explicit HasColumnName configuration.
/// </summary>
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<Agent> Agents => Set<Agent>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Apply all entity type configurations from the Configurations namespace
modelBuilder.ApplyConfigurationsFromAssembly(typeof(AgentConfiguration).Assembly);
// Map the AgentStatus enum to a PostgreSQL enum type named "agent_status"
// This must be called after ApplyConfigurations to ensure the model is built
// before the enum mapping is applied.
modelBuilder.HasPostgresEnum<AgentStatus>();
base.OnModelCreating(modelBuilder);
}
}

View File

@@ -0,0 +1,27 @@
using Microsoft.EntityFrameworkCore;
using ControlCenter.Api.Entities;
namespace ControlCenter.Api.Data;
/// <summary>
/// Design-time factory for AppDbContext, used by EF Core tools (dotnet ef)
/// to create migrations without requiring a running application.
/// </summary>
public class AppDbContextFactory : Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory<AppDbContext>
{
public AppDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();
// Connection string for design-time operations (migrations).
// In production, this comes from appsettings / environment variables.
var connectionString = "Host=localhost;Database=control_center;Username=postgres;Password=postgres";
optionsBuilder.UseNpgsql(connectionString, npgsqlOptions =>
{
npgsqlOptions.MigrationsAssembly(typeof(AppDbContext).Assembly.FullName);
});
return new AppDbContext(optionsBuilder.Options);
}
}