Commit Graph

2 Commits

Author SHA1 Message Date
kjh2064 2eee44d19b feat: Phase 3 VS-08 Risk Dashboard — GOV+DATA+DOMAIN+BE+FE (5/7)
- VS-08_DASHBOARD_SLICE_SPEC.md: Comprehensive dashboard specification
- VS-08_DATA_CONTRACT.md: PIT aggregation schema + caching strategy
- VS08_DashboardPolicy.cs: Aggregation logic (health score, insights, validation)
- VS08_DashboardEndpoint.cs: GET /api/dashboard/risk + cache layer
- RiskDashboard.vue: Unified portfolio view with real-time metrics
- VS08_DashboardIntegrationTests.cs: 5 core policy tests

Status: GOV+DATA+DOMAIN+BE+ASYNC+FE complete (5/7 vertical slices)
TESTOPS: In progress (test suite has minor compatibility issues with VS-04/07)

Cumulative: Phase 2 Batch 3 + Phase 3 = 27/36 components (75% COMPLETE)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-05 22:12:06 +09:00
kjh2064 14c5e4f668 feat: Phase 2 Batch 3 (VS-04~07) BE+ASYNC — Risk & Portfolio REST APIs + Hangfire Jobs
Implemented REST endpoints and async job handlers for portfolio/risk management:

 VS-04: Portfolio Rebalance
   - POST /api/portfolio/{id}/rebalance (202 Accepted)
     • Trigger rebalancing, return jobId + estimated trades
     • Idempotency: by (portfolio_id, target_weights_hash, correlation_id)
   - GET /api/portfolio/{id}/composition (200 OK)
     • Current composition with weights
   - PortfolioRebalanceJobHandler (Hangfire)
     • Simulate rebalancing execution
     • Publish PortfolioRebalanced event to outbox

 VS-05: Risk Metrics
   - GET /api/portfolio/{id}/risk (200 OK)
     • VAR-95, Sharpe, Sortino, volatility, concentration
     • Cached < 1hr, refresh daily
   - RiskCalculationJobHandler (Hangfire)
     • Daily at 9:30 KST (after market open)
     • Calculate metrics from price history
     • Publish PortfolioMetricsCalculated event

 VS-06: Stress Testing
   - POST /api/portfolio/{id}/stress (202 Accepted)
     • Trigger scenario analysis (bull/bear/rate/vol)
     • Return stressTestId
   - StressTestJobHandler (Hangfire)
     • Apply scenario shocks to positions
     • Calculate portfolio loss
     • Publish PortfolioStressTestCompleted event

 VS-07: Risk Alerts
   - GET /api/portfolio/{id}/alerts (200 OK)
     • Active alerts (Initial/Warning/Critical)
     • Resolved alerts (history)
   - AlertEscalationJobHandler (Hangfire)
     • Run every 1 minute (after metrics update)
     • Escalate: Initial (0min) → Warning (2min) → Critical (5min)
     • Auto-resolve when metric back to safe

📊 Deliverables:
   - 4 Endpoint classes (FastEndpoints)
   - 4 Service classes (DI-injectable)
   - 4 Hangfire Job handlers
   - 8 DTOs (Request/Response)
   - Full Npgsql integration (PIT queries)
   - Outbox event publishing (async coupling)
   - Idempotency enforcement (hash-based)

🏗️ Architecture:
   - Endpoints: 202 Accepted (async processing)
   - Jobs: Deterministic, idempotent, event-driven
   - Database: PIT-compliant queries with published_at <= cutoff
   - Async: Event → outbox → inbox consumers
   - Error handling: Transaction rollback on failure

Phase 2 Batch 3 Progress: 4/7 (GOV+DATA+DOMAIN+BE+ASYNC complete, FE+TESTOPS pending)

Build:  PASS
Tests:  Running (45 domain tests + 20 new endpoint/job tests = 65 total)

Next: FE + TESTOPS (parallel)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-05 21:53:08 +09:00