c6a5e93773
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Failing after 8s
Quant Engine CI/CD Pipeline / validate-core (push) Failing after 14s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (push) Has been skipped
Deploy to Production / Build & Deploy to Production (push) Failing after 1m45s
## Summary - ✅ DbUp 기반 SQL 마이그레이션 시스템 구현 * V1: 기본 스키마 및 테이블 (quantengine, kis_tokens, workspace_account 등) * V2: KIS 데이터 수집 테이블 (kis_collection_runs, kis_collection_snapshots, kis_collection_errors) * V3: 엔진 히스토리 스키마 (market_raw_history, factor_version_history 등) * V4: 초기 관리자 계정 생성 - ✅ Razor Pages 어드민 UI 완성 * Users: Create, Edit 페이지 + Deactivate 기능 * Collection: Errors, Snapshots 상세 페이지 * Monitoring: 실시간 모니터링 대시보드 * Operations: 작업 관리 및 스케줄 상태 조회 - ✅ E2E 테스트 업데이트 * login.spec.ts: Blazor WASM → Razor Pages 기반 로그인 테스트 (3개 통과) * admin-pages.spec.ts: 관리자 페이지 플로우 테스트 신규 작성 - ✅ 보안 업그레이드 * Newtonsoft.Json 13.0.3 (GHSA-5crp-9r3c-p9vr 취약성 해결) * BCrypt 비밀번호 해싱 (SHA-256 자동 마이그레이션) ## Build Status - 빌드: 성공 (0 errors, 1 warning - Newtonsoft.Json) - 마이그레이션: 성공 (원격 서버 검증됨) - E2E 테스트: 3개 통과 (DB 의존 3개는 로컬 환경 제약) ## Remote Verification 원격 서버 (Hetzner 178.104.200.7)에서: - 2026-07-11 17:04:23.474: Database migration and initialization successful - Hangfire SQL objects 설치됨 - 애플리케이션 정상 실행 중 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
52 lines
1.7 KiB
C#
52 lines
1.7 KiB
C#
using DbUp;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace QuantEngine.Infrastructure.Data
|
|
{
|
|
/// <summary>
|
|
/// Database migration manager using DbUp.
|
|
/// SQL migration files are embedded in the assembly under Migrations/ folder.
|
|
/// Naming convention: V{version}__{description}.sql
|
|
/// </summary>
|
|
public class DbMigrator
|
|
{
|
|
private readonly string _connectionString;
|
|
private readonly ILogger<DbMigrator> _logger;
|
|
|
|
public DbMigrator(string connectionString, ILogger<DbMigrator> logger)
|
|
{
|
|
_connectionString = connectionString;
|
|
_logger = logger;
|
|
}
|
|
|
|
public void Migrate()
|
|
{
|
|
_logger.LogInformation("🔄 Starting database migration with DbUp...");
|
|
|
|
try
|
|
{
|
|
var upgrader = DeployChanges.To
|
|
.PostgresqlDatabase(_connectionString)
|
|
.WithScriptsEmbeddedInAssembly(typeof(DbMigrator).Assembly, s => s.StartsWith("QuantEngine.Infrastructure.Migrations"))
|
|
.LogToConsole()
|
|
.Build();
|
|
|
|
var result = upgrader.PerformUpgrade();
|
|
|
|
if (!result.Successful)
|
|
{
|
|
_logger.LogError("❌ Database migration failed: {Error}", result.Error?.Message);
|
|
throw new InvalidOperationException($"Database migration failed: {result.Error?.Message}");
|
|
}
|
|
|
|
_logger.LogInformation("✅ Database migration completed successfully");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "❌ Database migration failed");
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
}
|