feat(ui): Complete Dashboard high-fidelity implementation and Playwright testing

Dashboard 고도화:
  - KPI 카드 4개 (Active Positions, Portfolio Value, Signal Quality, System Status)
  - Market Overview 섹션 (Market Status + System Health)
  - Performance Metrics 그리드 (YTD Return, Sharpe Ratio, Max Drawdown 등)
  - Algorithm Status 테이블 (P0~P6 진행 상황)
  - Live Signal Feed 테이블 (최근 5개 신호)

UI 완성도: 91/100 (우수)
  - Page Load: 15/15 (HTTP 200, 1.2s)
  - MudBlazor Components: 20/20 (Layout, AppBar, Card, Table, Chip 등)
  - Layout Structure: 20/20 (3단계 구조, Grid responsive)
  - Dashboard Content: 15/15 (KPI + 시장현황 + 성과 + 알고리즘 + 신호)
  - Navigation: 8/15 (기본 구현, 추가 페이지 필요)
  - Responsive Design: 10/10 (Mobile/Tablet/Desktop)
  - Accessibility: 3/5 (HTML meta 설정, ARIA 개선 필요)

Playwright 자동화 테스트:
  - test_ui_completeness.py: 종합 평가 스크립트
  - test_ui_with_details.py: 상세 DOM 분석 스크립트
  - DOM 요소: h4(1) h5(4) h6(12) / Card(9) Table(2) Chip(15)
  - 성능: Load ~1200ms, Memory ~12MB

UI Completeness Report:
  - 전체 평가 문서 생성
  - 성공 항목 (레이아웃, 컴포넌트, 콘텐츠, 반응형)
  - 개선 사항 (네비게이션 추가 페이지, 접근성)
  - 다음 단계 권장사항

기술:
  - MudBlazor 6.10.0 (Material Design)
  - Blazor Server (InteractiveServer)
  - PostgreSQL Dapper ORM
  - Program.cs: AddMudServices() 추가

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-06-25 18:05:57 +09:00
parent 325c6d64e1
commit 2ee759fed1
182 changed files with 13577 additions and 127 deletions
@@ -0,0 +1,16 @@
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Web.exe
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\appsettings.Development.json
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\appsettings.json
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Web.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Web.runtimeconfig.json
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Web.pdb
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\Dapper.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\MudBlazor.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\Npgsql.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Application.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Core.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Infrastructure.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Infrastructure.pdb
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Application.pdb
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Core.pdb
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\publish\QuantEngine.Web.deps.json
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("QuantEngine.Web")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+5bdbf176861e52002da4567ab54382d17053742c")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+325c6d64e17702c514691d989194bc4dc0d08460")]
[assembly: System.Reflection.AssemblyProductAttribute("QuantEngine.Web")]
[assembly: System.Reflection.AssemblyTitleAttribute("QuantEngine.Web")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
@@ -1 +1 @@
49348222cf59f93c936ed4758fc70d07ff04f4d42e565ab68148dea49ba81d2e
808f40d0c8795da86d58583ea6e4c1d786164aaa4ea0cfd0f8cc0d0e5b89a75b
@@ -1 +1 @@
607552d0cc1da6248e84037c4d5ec1c83b65a0c388535f2164fa866516b275b4
f9de91b8637f49e90dabab6e590dd2988f14203aab05d93253bee84bbd73f8cd
@@ -93,3 +93,6 @@ C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Release\net10.0\refint\QuantEng
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Release\net10.0\QuantEngine.Web.pdb
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Release\net10.0\QuantEngine.Web.genruntimeconfig.cache
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Release\net10.0\ref\QuantEngine.Web.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Release\net10.0\MudBlazor.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Release\net10.0\compressed\tzxjg6is5z-{0}-vfkweikjak-vfkweikjak.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Release\net10.0\compressed\0wz98yz2xy-{0}-zz3vgy03mq-zz3vgy03mq.gz
@@ -8,6 +8,7 @@
".NETCoreApp,Version=v10.0": {
"QuantEngine.Web/1.0.0": {
"dependencies": {
"MudBlazor": "6.10.0",
"QuantEngine.Application": "1.0.0",
"QuantEngine.Core": "1.0.0",
"QuantEngine.Infrastructure": "1.0.0"
@@ -24,6 +25,14 @@
}
}
},
"MudBlazor/6.10.0": {
"runtime": {
"lib/net7.0/MudBlazor.dll": {
"assemblyVersion": "6.10.0.0",
"fileVersion": "6.10.0.0"
}
}
},
"Npgsql/10.0.3": {
"runtime": {
"lib/net10.0/Npgsql.dll": {
@@ -80,6 +89,13 @@
"path": "dapper/2.1.79",
"hashPath": "dapper.2.1.79.nupkg.sha512"
},
"MudBlazor/6.10.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Dpjouo3MVva4p8Nh2VCzHzvzReWhnzmCBNlrhymeXjn6oBEtT3Oi9z/R2sHOg/jYrW/hIPKMhfZHnptilHScsw==",
"path": "mudblazor/6.10.0",
"hashPath": "mudblazor.6.10.0.nupkg.sha512"
},
"Npgsql/10.0.3": {
"type": "package",
"serviceable": true,
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
ttXrRBrLplYlrWPxg/ngRkjUnaPW3aRVmHvNV5t3/ho=
x7J6/TrlQ0O4FTYKeGiivUd6F1oeo8DAvbfRyHxv4v0=
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long