refactor(web): MudBlazor → Fluent UI Blazor v5 마이그레이션 완료
Quant Engine CI/CD Pipeline / validate-core (push) Failing after 10s
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Failing after 8s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (push) Has been skipped
Snapshot Admin Deployment / build-and-deploy (push) Failing after 1m0s
Deploy to Production / Build & Deploy to Production (push) Successful in 1m21s

**주요 변경사항:**
- NuGet: MudBlazor 6.10.0 → Microsoft.FluentUI.AspNetCore.Components 5.0.0-rc.4-26177.1 변경
- Program.cs: MudBlazor DI → Fluent UI DI 등록
- App.razor: CSS/JS 라이브러리 및 프로바이더 변경
- MainLayout.razor: MudLayout → FluentStack 기반 재구성
  - FluentHeader 헤더 적용
  - 네비게이션 사이드바 토글 기능
  - Flexbox 레이아웃
- NavMenu.razor: MudNavMenu/MudNavLink → FluentNavMenu/FluentNavLink
- Dashboard.razor: MudBlazor 모든 컴포넌트 → Fluent UI v5로 변환
  - MudCard → FluentCard
  - MudGrid → FluentStack (Wrap)
  - MudText → HTML (h1, p, span)
  - MudChip → FluentBadge
  - MudTable → FluentDataGrid
  - MudAlert → div (커스텀 스타일)
- Operations.razor: 동일 패턴 적용
- _Imports.razor: Fluent UI 네임스페이스 추가

**빌드 결과:**  SUCCESS (0 errors, 5 warnings)

**다음 단계:** Stage 2 - Python → .NET 마이그레이션

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-06-29 23:11:18 +09:00
parent aad4788e84
commit 459edf5940
243 changed files with 2857 additions and 544 deletions
@@ -6,10 +6,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<base href="/quant/" />
<ResourcePreloader />
<!-- MudBlazor CSS -->
<!-- Fluent UI CSS -->
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet" />
<link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet" />
<link rel="stylesheet" href="@Assets["lib/bootstrap/dist/css/bootstrap.min.css"]" />
<link href="_content/Microsoft.FluentUI.AspNetCore.Components/css/fluent-components.css" rel="stylesheet" />
<link rel="stylesheet" href="@Assets["app.css"]" />
<link rel="stylesheet" href="@Assets["QuantEngine.Web.styles.css"]" />
<ImportMap />
@@ -18,15 +17,13 @@
</head>
<body>
<MudThemeProvider />
<MudDialogProvider />
<MudSnackbarProvider />
<FluentDesignSystemProvider>
<Routes />
<ReconnectModal />
</FluentDesignSystemProvider>
<Routes />
<ReconnectModal />
<!-- MudBlazor JS -->
<script src="_content/MudBlazor/MudBlazor.min.js"></script>
<!-- Fluent UI JS -->
<script src="_content/Microsoft.FluentUI.AspNetCore.Components/js/fluent-components.js"></script>
<script src="@Assets["_framework/blazor.web.js"]"></script>
</body>
@@ -2,37 +2,42 @@
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment
@using System.IO
@using System.Text.Json
@using Microsoft.FluentUI.AspNetCore.Components
<MudLayout>
<MudAppBar Elevation="1">
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@((e) => DrawerToggle())" />
<MudSpacer />
<MudText Typo="Typo.h5" Class="ml-3">Quant Engine</MudText>
<MudSpacer />
<MudIconButton Icon="@Icons.Material.Filled.Settings" Color="Color.Inherit" />
</MudAppBar>
<FluentStack Orientation="Orientation.Vertical" Class="h-100 w-100">
<!-- Header -->
<FluentHeader>
<FluentStack Orientation="Orientation.Horizontal" VerticalAlignment="VerticalAlignment.Center"
Style="width: 100%; padding: 8px 16px; gap: 16px;">
<FluentButton OnClick="@(() => navOpen = !navOpen)"
Title="Toggle Navigation"
Style="background: transparent; border: none; cursor: pointer;">
</FluentButton>
<h1 style="margin: 0; font-size: 20px; font-weight: 600;">QuantEngine v@appVersion</h1>
</FluentStack>
</FluentHeader>
<MudDrawer @bind-Open="@drawerOpen" Elevation="1" Class="d-flex flex-column h-100">
<MudDrawerHeader>
<MudText Typo="Typo.h6">Menu</MudText>
</MudDrawerHeader>
<NavMenu />
<MudSpacer />
<div class="px-4 py-3 mt-auto" style="border-top: 1px solid rgba(0,0,0,0.08); font-size: 11px; color: var(--mud-palette-text-secondary); line-height: 1.5; background-color: rgba(0,0,0,0.01);">
<div style="font-weight: 500; margin-bottom: 2px;">QuantEngine v@appVersion</div>
<div style="font-size: 10px; opacity: 0.85;">배포: @buildTime</div>
</div>
</MudDrawer>
<!-- Main Content Area -->
<FluentStack Orientation="Orientation.Horizontal" Class="flex-1" Style="overflow: hidden;">
<!-- Navigation Sidebar -->
@if (navOpen)
{
<nav style="width: 240px; background: var(--neutral-layer-1); border-right: 1px solid var(--neutral-stroke-1); padding: 12px; overflow-y: auto;">
<NavMenu />
<div style="margin-top: auto; padding-top: 12px; border-top: 1px solid var(--neutral-stroke-1); margin-top: 12px; font-size: 11px; color: var(--neutral-foreground-3); line-height: 1.5;">
<div style="font-weight: 500; margin-bottom: 2px;">QuantEngine v@appVersion</div>
<div style="font-size: 10px; opacity: 0.85;">배포: @buildTime</div>
</div>
</nav>
}
<MudMainContent>
<MudContainer MaxWidth="MaxWidth.Large" Class="my-4">
<!-- Page Content -->
<FluentStack Orientation="Orientation.Vertical" Class="flex-1" Style="overflow-y: auto; padding: 24px;">
@Body
</MudContainer>
</MudMainContent>
</MudLayout>
</FluentStack>
</FluentStack>
</FluentStack>
<div id="blazor-error-ui" data-nosnippet>
<div class="alert alert-danger" role="alert">
@@ -41,16 +46,24 @@
</div>
</div>
<style>
.h-100 {
height: 100%;
}
.w-100 {
width: 100%;
}
.flex-1 {
flex: 1;
display: flex;
}
</style>
@code {
private bool drawerOpen = true;
private bool navOpen = true;
private string appVersion = "Local Debug";
private string buildTime = "N/A";
private void DrawerToggle()
{
drawerOpen = !drawerOpen;
}
protected override void OnInitialized()
{
try
@@ -61,7 +74,7 @@
var jsonContent = File.ReadAllText(versionFilePath);
using var doc = System.Text.Json.JsonDocument.Parse(jsonContent);
var root = doc.RootElement;
if (root.TryGetProperty("version", out var versionProp))
{
appVersion = versionProp.GetString() ?? "Local Debug";
@@ -1,8 +1,10 @@
<MudNavMenu>
<MudNavLink Href="/" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Dashboard">
@using Microsoft.FluentUI.AspNetCore.Components
<FluentNavMenu>
<FluentNavLink Href="/" Match="NavLinkMatch.All">
Dashboard
</MudNavLink>
<MudNavLink Href="/operations" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.Assessment">
</FluentNavLink>
<FluentNavLink Href="/operations" Match="NavLinkMatch.Prefix">
Operations
</MudNavLink>
</MudNavMenu>
</FluentNavLink>
</FluentNavMenu>
@@ -4,117 +4,90 @@
<PageTitle>Quant Engine - Dashboard</PageTitle>
<MudText Typo="Typo.h4" Class="mb-2">Quant Engine</MudText>
<MudText Typo="Typo.body2" Color="Color.Secondary" Class="mb-4">
<h1 style="margin: 0 0 8px 0; font-size: 28px; font-weight: 600;">Quant Engine</h1>
<p style="margin: 0 0 16px 0; color: var(--neutral-foreground-2); font-size: 14px;">
루트 화면은 운영 진입점입니다. 가짜 성과 수치 없이 현재 스냅샷 상태와 리포트 경로만 보여줍니다.
</MudText>
</p>
<MudGrid Class="mb-4">
<MudItem xs="12" sm="6" md="4">
<MudCard Class="h-100">
<MudCardContent>
<MudText Typo="Typo.body2" Color="Color.Secondary">Operational Report</MudText>
<MudText Typo="Typo.h6" Class="mt-2">@ReportStateLabel</MudText>
<MudText Typo="Typo.caption">@ReportPath</MudText>
</MudCardContent>
</MudCard>
</MudItem>
<MudItem xs="12" sm="6" md="4">
<MudCard Class="h-100">
<MudCardContent>
<MudText Typo="Typo.body2" Color="Color.Secondary">Sections</MudText>
<MudText Typo="Typo.h6" Class="mt-2">@SectionCountLabel</MudText>
<MudText Typo="Typo.caption">Temp/operational_report.json</MudText>
</MudCardContent>
</MudCard>
</MudItem>
<MudItem xs="12" sm="6" md="4">
<MudCard Class="h-100">
<MudCardContent>
<MudText Typo="Typo.body2" Color="Color.Secondary">Primary Route</MudText>
<MudButton Variant="Variant.Filled" Color="Color.Primary" Href="/operations" Class="mt-2">
Open Operations
</MudButton>
</MudCardContent>
</MudCard>
</MudItem>
</MudGrid>
<!-- Top 3 Cards -->
<FluentStack Orientation="Orientation.Horizontal" HorizontalGap="16" Wrap="true" Style="margin-bottom: 16px;">
<FluentCard Style="flex: 1; min-width: 200px;">
<div style="padding: 16px;">
<p style="margin: 0 0 8px 0; color: var(--neutral-foreground-2); font-size: 12px; font-weight: 500;">Operational Report</p>
<h3 style="margin: 0; font-size: 20px; font-weight: 600;">@ReportStateLabel</h3>
<p style="margin: 8px 0 0 0; color: var(--neutral-foreground-3); font-size: 12px;">@ReportPath</p>
</div>
</FluentCard>
<FluentCard Style="flex: 1; min-width: 200px;">
<div style="padding: 16px;">
<p style="margin: 0 0 8px 0; color: var(--neutral-foreground-2); font-size: 12px; font-weight: 500;">Sections</p>
<h3 style="margin: 0; font-size: 20px; font-weight: 600;">@SectionCountLabel</h3>
<p style="margin: 8px 0 0 0; color: var(--neutral-foreground-3); font-size: 12px;">Temp/operational_report.json</p>
</div>
</FluentCard>
<FluentCard Style="flex: 1; min-width: 200px;">
<div style="padding: 16px;">
<p style="margin: 0 0 8px 0; color: var(--neutral-foreground-2); font-size: 12px; font-weight: 500;">Primary Route</p>
<FluentButton Appearance="ButtonAppearance.Primary" Href="/operations" Style="margin-top: 8px;">
Open Operations
</FluentButton>
</div>
</FluentCard>
</FluentStack>
<MudGrid Class="mb-4">
<MudItem xs="12" md="7">
<MudCard Class="h-100">
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h6">Current State</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
<MudStack Spacing="2">
<MudText Typo="Typo.body2"><strong>Status:</strong> <MudChip Size="Size.Small" Color="@ReportChipColor">@ReportChipLabel</MudChip></MudText>
<MudText Typo="Typo.body2"><strong>Generated:</strong> @GeneratedAtLabel</MudText>
<MudText Typo="Typo.body2"><strong>Source:</strong> @SourceLabel</MudText>
<MudText Typo="Typo.body2"><strong>Decision feed:</strong> @DecisionFeedLabel</MudText>
<MudText Typo="Typo.body2"><strong>Factor feed:</strong> @FactorFeedLabel</MudText>
<MudText Typo="Typo.body2"><strong>Raw feed:</strong> @RawFeedLabel</MudText>
</MudStack>
</MudCardContent>
</MudCard>
</MudItem>
<!-- Current State & Routing Notes -->
<FluentStack Orientation="Orientation.Horizontal" HorizontalGap="16" Wrap="true" Style="margin-bottom: 16px;">
<FluentCard Style="flex: 2; min-width: 300px;">
<div style="padding: 16px;">
<h3 style="margin: 0 0 12px 0; font-size: 16px; font-weight: 600;">Current State</h3>
<FluentStack Orientation="Orientation.Vertical" VerticalGap="8">
<p style="margin: 0; font-size: 14px;"><strong>Status:</strong> <FluentBadge Appearance="BadgeAppearance.Filled">@ReportChipLabel</FluentBadge></p>
<p style="margin: 0; font-size: 14px;"><strong>Generated:</strong> @GeneratedAtLabel</p>
<p style="margin: 0; font-size: 14px;"><strong>Source:</strong> @SourceLabel</p>
<p style="margin: 0; font-size: 14px;"><strong>Decision feed:</strong> @DecisionFeedLabel</p>
<p style="margin: 0; font-size: 14px;"><strong>Factor feed:</strong> @FactorFeedLabel</p>
<p style="margin: 0; font-size: 14px;"><strong>Raw feed:</strong> @RawFeedLabel</p>
</FluentStack>
</div>
</FluentCard>
<MudItem xs="12" md="5">
<MudCard Class="h-100">
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h6">Routing Notes</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
<MudStack Spacing="2">
<MudText Typo="Typo.body2">- 운영 데이터는 snapshot 우선입니다.</MudText>
<MudText Typo="Typo.body2">- Excel/GAS 의존 문구는 운영 경로에서 제거 대상입니다.</MudText>
<MudText Typo="Typo.body2">- 숫자는 provenance 없으면 표시하지 않습니다.</MudText>
</MudStack>
</MudCardContent>
</MudCard>
</MudItem>
</MudGrid>
<FluentCard Style="flex: 1; min-width: 250px;">
<div style="padding: 16px;">
<h3 style="margin: 0 0 12px 0; font-size: 16px; font-weight: 600;">Routing Notes</h3>
<ul style="margin: 0; padding-left: 16px; font-size: 14px;">
<li>운영 데이터는 snapshot 우선입니다.</li>
<li>Excel/GAS 의존 문구는 운영 경로에서 제거 대상입니다.</li>
<li>숫자는 provenance 없으면 표시하지 않습니다.</li>
</ul>
</div>
</FluentCard>
</FluentStack>
<MudCard>
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h6">Coverage Summary</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
<!-- Coverage Summary -->
<FluentCard>
<div style="padding: 16px;">
<h3 style="margin: 0 0 12px 0; font-size: 16px; font-weight: 600;">Coverage Summary</h3>
@if (Sections.Count == 0)
{
<MudAlert Severity="Severity.Warning" Variant="Variant.Outlined">
<div style="padding: 12px; background: var(--warning-background-1); border: 1px solid var(--warning-stroke-1); border-radius: 4px; color: var(--warning-foreground-1); font-size: 14px;">
DATA_MISSING: operational_report.json이 비어 있거나 아직 생성되지 않았습니다.
</MudAlert>
</div>
}
else
{
<MudTable Items="Sections" Hover="true" Striped="true" Dense="true">
<HeaderContent>
<MudTh>Name</MudTh>
<MudTh>Title</MudTh>
<MudTh>Preview</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd>@context.Name</MudTd>
<MudTd>@context.Title</MudTd>
<MudTd>@context.Preview</MudTd>
</RowTemplate>
</MudTable>
<FluentDataGrid Items="@Sections.AsQueryable()">
<PropertyColumn Property="@(x => x.Name)" Title="Name" />
<PropertyColumn Property="@(x => x.Title)" Title="Title" />
<PropertyColumn Property="@(x => x.Preview)" Title="Preview" />
</FluentDataGrid>
}
</MudCardContent>
</MudCard>
</div>
</FluentCard>
@code {
private readonly List<OperationalReportSection> Sections = new();
private string ReportStateLabel = "DATA_MISSING";
private string ReportChipLabel = "DATA_MISSING";
private Color ReportChipColor = Color.Warning;
private string SectionCountLabel = "0";
private string GeneratedAtLabel = "n/a";
private string SourceLabel = "n/a";
@@ -133,6 +106,5 @@
SourceLabel = report.SourceJson;
ReportStateLabel = Sections.Count > 0 ? "READY" : "DATA_MISSING";
ReportChipLabel = Sections.Count > 0 ? "READY" : "DATA_MISSING";
ReportChipColor = Sections.Count > 0 ? Color.Success : Color.Warning;
}
}
@@ -4,106 +4,85 @@
<PageTitle>Quant Engine - Operations</PageTitle>
<MudText Typo="Typo.h4" Class="mb-2">Operational Report</MudText>
<MudText Typo="Typo.body2" Color="Color.Secondary" Class="mb-4">
<h1 style="margin: 0 0 8px 0; font-size: 28px; font-weight: 600;">Operational Report</h1>
<p style="margin: 0 0 16px 0; color: var(--neutral-foreground-2); font-size: 14px;">
이 페이지는 `Temp/operational_report.json`만 읽습니다. DB 연결과 무관하게 동일한 결과를 보여주는 운영 고정 화면입니다.
</MudText>
</p>
<MudGrid Class="mb-4">
<MudItem xs="12" sm="6" md="3">
<MudCard Class="h-100">
<MudCardContent>
<MudText Typo="Typo.body2" Color="Color.Secondary">Schema</MudText>
<MudText Typo="Typo.h6" Class="mt-2">@SchemaVersion</MudText>
</MudCardContent>
</MudCard>
</MudItem>
<MudItem xs="12" sm="6" md="3">
<MudCard Class="h-100">
<MudCardContent>
<MudText Typo="Typo.body2" Color="Color.Secondary">Sections</MudText>
<MudText Typo="Typo.h6" Class="mt-2">@SectionCountLabel</MudText>
</MudCardContent>
</MudCard>
</MudItem>
<MudItem xs="12" sm="6" md="3">
<MudCard Class="h-100">
<MudCardContent>
<MudText Typo="Typo.body2" Color="Color.Secondary">Source</MudText>
<MudText Typo="Typo.h6" Class="mt-2">@SourceJson</MudText>
</MudCardContent>
</MudCard>
</MudItem>
<MudItem xs="12" sm="6" md="3">
<MudCard Class="h-100">
<MudCardContent>
<MudText Typo="Typo.body2" Color="Color.Secondary">Generated</MudText>
<MudText Typo="Typo.h6" Class="mt-2">@GeneratedAt</MudText>
</MudCardContent>
</MudCard>
</MudItem>
</MudGrid>
<!-- Metadata Cards -->
<FluentStack Orientation="Orientation.Horizontal" HorizontalGap="16" Wrap="true" Style="margin-bottom: 16px;">
<FluentCard Style="flex: 1; min-width: 150px;">
<div style="padding: 16px;">
<p style="margin: 0 0 8px 0; color: var(--neutral-foreground-2); font-size: 12px; font-weight: 500;">Schema</p>
<h3 style="margin: 0; font-size: 18px; font-weight: 600;">@SchemaVersion</h3>
</div>
</FluentCard>
<FluentCard Style="flex: 1; min-width: 150px;">
<div style="padding: 16px;">
<p style="margin: 0 0 8px 0; color: var(--neutral-foreground-2); font-size: 12px; font-weight: 500;">Sections</p>
<h3 style="margin: 0; font-size: 18px; font-weight: 600;">@SectionCountLabel</h3>
</div>
</FluentCard>
<FluentCard Style="flex: 1; min-width: 150px;">
<div style="padding: 16px;">
<p style="margin: 0 0 8px 0; color: var(--neutral-foreground-2); font-size: 12px; font-weight: 500;">Source</p>
<h3 style="margin: 0; font-size: 18px; font-weight: 600;">@SourceJson</h3>
</div>
</FluentCard>
<FluentCard Style="flex: 1; min-width: 150px;">
<div style="padding: 16px;">
<p style="margin: 0 0 8px 0; color: var(--neutral-foreground-2); font-size: 12px; font-weight: 500;">Generated</p>
<h3 style="margin: 0; font-size: 18px; font-weight: 600;">@GeneratedAt</h3>
</div>
</FluentCard>
</FluentStack>
<MudGrid Class="mb-4">
<!-- Highlight Sections Grid -->
<FluentStack Orientation="Orientation.Horizontal" HorizontalGap="16" Wrap="true" Style="margin-bottom: 16px;">
@foreach (var section in HighlightSections)
{
<MudItem xs="12" sm="6" lg="3">
<MudCard Class="h-100">
<MudCardContent>
<MudText Typo="Typo.body2" Color="Color.Secondary">@(section.Name)</MudText>
<MudText Typo="Typo.subtitle1" Class="mt-1">@(section.Title)</MudText>
<MudText Typo="Typo.caption" Color="Color.Secondary">@(section.Preview)</MudText>
</MudCardContent>
</MudCard>
</MudItem>
<FluentCard Style="flex: 1; min-width: 200px;">
<div style="padding: 16px;">
<p style="margin: 0 0 4px 0; color: var(--neutral-foreground-2); font-size: 12px;">@(section.Name)</p>
<h3 style="margin: 4px 0; font-size: 16px; font-weight: 600;">@(section.Title)</h3>
<p style="margin: 8px 0 0 0; color: var(--neutral-foreground-3); font-size: 12px;">@(section.Preview)</p>
</div>
</FluentCard>
}
</MudGrid>
</FluentStack>
<MudCard Class="mb-4">
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h6">Report Health</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
<MudStack Spacing="2">
<MudText Typo="Typo.body2"><strong>Status:</strong> <MudChip Size="Size.Small" Color="@HealthColor">@HealthLabel</MudChip></MudText>
<MudText Typo="Typo.body2"><strong>Path:</strong> @ReportPath</MudText>
<MudText Typo="Typo.body2"><strong>Sections rendered:</strong> @RenderedSectionCountLabel</MudText>
</MudStack>
</MudCardContent>
</MudCard>
<!-- Report Health -->
<FluentCard Style="margin-bottom: 16px;">
<div style="padding: 16px;">
<h3 style="margin: 0 0 12px 0; font-size: 16px; font-weight: 600;">Report Health</h3>
<FluentStack Orientation="Orientation.Vertical" VerticalGap="8">
<p style="margin: 0; font-size: 14px;"><strong>Status:</strong> <FluentBadge Appearance="BadgeAppearance.Filled">@HealthLabel</FluentBadge></p>
<p style="margin: 0; font-size: 14px;"><strong>Path:</strong> @ReportPath</p>
<p style="margin: 0; font-size: 14px;"><strong>Sections rendered:</strong> @RenderedSectionCountLabel</p>
</FluentStack>
</div>
</FluentCard>
<MudCard>
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h6">Sections</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
<!-- Sections Table -->
<FluentCard>
<div style="padding: 16px;">
<h3 style="margin: 0 0 12px 0; font-size: 16px; font-weight: 600;">Sections</h3>
@if (Sections.Count == 0)
{
<MudAlert Severity="Severity.Warning" Variant="Variant.Outlined">
<div style="padding: 12px; background: var(--warning-background-1); border: 1px solid var(--warning-stroke-1); border-radius: 4px; color: var(--warning-foreground-1); font-size: 14px;">
DATA_MISSING: operational_report.json에 표시할 섹션이 없습니다.
</MudAlert>
</div>
}
else
{
<MudTable Items="Sections" Hover="true" Striped="true" Dense="true">
<HeaderContent>
<MudTh>Name</MudTh>
<MudTh>Title</MudTh>
<MudTh>Preview</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd>@context.Name</MudTd>
<MudTd>@context.Title</MudTd>
<MudTd>@context.Preview</MudTd>
</RowTemplate>
</MudTable>
<FluentDataGrid Items="@Sections.AsQueryable()">
<PropertyColumn Property="@(x => x.Name)" Title="Name" />
<PropertyColumn Property="@(x => x.Title)" Title="Title" />
<PropertyColumn Property="@(x => x.Preview)" Title="Preview" />
</FluentDataGrid>
}
</MudCardContent>
</MudCard>
</div>
</FluentCard>
@code {
private readonly List<OperationalReportSection> Sections = new();
@@ -114,7 +93,6 @@
private string SectionCountLabel = "0";
private string RenderedSectionCountLabel = "0";
private string HealthLabel = "DATA_MISSING";
private Color HealthColor = Color.Warning;
private string ReportPath = "n/a";
protected override async Task OnInitializedAsync()
@@ -133,6 +111,5 @@
SectionCountLabel = report.SectionCount.ToString();
RenderedSectionCountLabel = Sections.Count.ToString();
HealthLabel = Sections.Count > 0 ? "PASS" : "DATA_MISSING";
HealthColor = Sections.Count > 0 ? Color.Success : Color.Warning;
}
}
@@ -6,7 +6,8 @@
@using static Microsoft.AspNetCore.Components.Web.RenderMode
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using MudBlazor
@using Microsoft.FluentUI.AspNetCore.Components
@using Microsoft.FluentUI.AspNetCore.Components.Icons
@using QuantEngine.Web
@using QuantEngine.Web.Components
@using QuantEngine.Web.Components.Layout
+3 -3
View File
@@ -4,7 +4,7 @@ using QuantEngine.Infrastructure.Repositories;
using QuantEngine.Core.Interfaces;
using QuantEngine.Application.Services;
using System.Text.Json;
using MudBlazor.Services;
using Microsoft.FluentUI.AspNetCore.Components;
using Serilog;
using QuantEngine.Web.Infrastructure;
@@ -22,8 +22,8 @@ builder.Host.UseSerilog();
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
// MudBlazor Services
builder.Services.AddMudServices();
// Fluent UI Services
builder.Services.AddFluentUIComponents();
// PostgreSQL Dapper Setup
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection")
@@ -7,7 +7,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="MudBlazor" Version="6.10.0" />
<PackageReference Include="Microsoft.FluentUI.AspNetCore.Components" Version="5.0.0-rc.4-26177.1" />
<PackageReference Include="Microsoft.FluentUI.AspNetCore.Components.Icons" Version="5.0.0-rc.4-26177.1" />
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
</ItemGroup>
@@ -8,10 +8,12 @@
".NETCoreApp,Version=v10.0": {
"QuantEngine.Web/1.0.0": {
"dependencies": {
"MudBlazor": "6.10.0",
"Microsoft.FluentUI.AspNetCore.Components": "5.0.0-rc.4-26177.1",
"Microsoft.FluentUI.AspNetCore.Components.Icons": "5.0.0-rc.4-26177.1",
"QuantEngine.Application": "1.0.0",
"QuantEngine.Core": "1.0.0",
"QuantEngine.Infrastructure": "1.0.0"
"QuantEngine.Infrastructure": "1.0.0",
"Serilog.AspNetCore": "10.0.0"
},
"runtime": {
"QuantEngine.Web.dll": {}
@@ -25,11 +27,46 @@
}
}
},
"MudBlazor/6.10.0": {
"Microsoft.Extensions.DependencyModel/10.0.0": {
"runtime": {
"lib/net7.0/MudBlazor.dll": {
"assemblyVersion": "6.10.0.0",
"fileVersion": "6.10.0.0"
"lib/net10.0/Microsoft.Extensions.DependencyModel.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.25.52411"
}
}
},
"Microsoft.FluentUI.AspNetCore.Components/5.0.0-rc.4-26177.1": {
"runtime": {
"lib/net10.0/Microsoft.FluentUI.AspNetCore.Components.dll": {
"assemblyVersion": "5.0.0.26177",
"fileVersion": "5.0.0.26177"
}
}
},
"Microsoft.FluentUI.AspNetCore.Components.Icons/5.0.0-rc.4-26177.1": {
"dependencies": {
"Microsoft.FluentUI.AspNetCore.Components": "5.0.0-rc.4-26177.1"
},
"runtime": {
"lib/net9.0/Microsoft.FluentUI.AspNetCore.Components.Icons.Color.dll": {
"assemblyVersion": "5.0.0.26177",
"fileVersion": "5.0.0.26177"
},
"lib/net9.0/Microsoft.FluentUI.AspNetCore.Components.Icons.Filled.dll": {
"assemblyVersion": "5.0.0.26177",
"fileVersion": "5.0.0.26177"
},
"lib/net9.0/Microsoft.FluentUI.AspNetCore.Components.Icons.Light.dll": {
"assemblyVersion": "5.0.0.26177",
"fileVersion": "5.0.0.26177"
},
"lib/net9.0/Microsoft.FluentUI.AspNetCore.Components.Icons.Regular.dll": {
"assemblyVersion": "5.0.0.26177",
"fileVersion": "5.0.0.26177"
},
"lib/net9.0/Microsoft.FluentUI.AspNetCore.Components.Icons.dll": {
"assemblyVersion": "5.0.0.26177",
"fileVersion": "5.0.0.26177"
}
}
},
@@ -41,6 +78,110 @@
}
}
},
"Serilog/4.3.0": {
"runtime": {
"lib/net9.0/Serilog.dll": {
"assemblyVersion": "4.3.0.0",
"fileVersion": "4.3.0.0"
}
}
},
"Serilog.AspNetCore/10.0.0": {
"dependencies": {
"Serilog": "4.3.0",
"Serilog.Extensions.Hosting": "10.0.0",
"Serilog.Formatting.Compact": "3.0.0",
"Serilog.Settings.Configuration": "10.0.0",
"Serilog.Sinks.Console": "6.1.1",
"Serilog.Sinks.Debug": "3.0.0",
"Serilog.Sinks.File": "7.0.0"
},
"runtime": {
"lib/net10.0/Serilog.AspNetCore.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.0.0"
}
}
},
"Serilog.Extensions.Hosting/10.0.0": {
"dependencies": {
"Serilog": "4.3.0",
"Serilog.Extensions.Logging": "10.0.0"
},
"runtime": {
"lib/net10.0/Serilog.Extensions.Hosting.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.0.0"
}
}
},
"Serilog.Extensions.Logging/10.0.0": {
"dependencies": {
"Serilog": "4.3.0"
},
"runtime": {
"lib/net10.0/Serilog.Extensions.Logging.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.0.0"
}
}
},
"Serilog.Formatting.Compact/3.0.0": {
"dependencies": {
"Serilog": "4.3.0"
},
"runtime": {
"lib/net8.0/Serilog.Formatting.Compact.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.0"
}
}
},
"Serilog.Settings.Configuration/10.0.0": {
"dependencies": {
"Microsoft.Extensions.DependencyModel": "10.0.0",
"Serilog": "4.3.0"
},
"runtime": {
"lib/net10.0/Serilog.Settings.Configuration.dll": {
"assemblyVersion": "10.0.0.0",
"fileVersion": "10.0.0.0"
}
}
},
"Serilog.Sinks.Console/6.1.1": {
"dependencies": {
"Serilog": "4.3.0"
},
"runtime": {
"lib/net8.0/Serilog.Sinks.Console.dll": {
"assemblyVersion": "6.1.1.0",
"fileVersion": "6.1.1.0"
}
}
},
"Serilog.Sinks.Debug/3.0.0": {
"dependencies": {
"Serilog": "4.3.0"
},
"runtime": {
"lib/net8.0/Serilog.Sinks.Debug.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.0"
}
}
},
"Serilog.Sinks.File/7.0.0": {
"dependencies": {
"Serilog": "4.3.0"
},
"runtime": {
"lib/net9.0/Serilog.Sinks.File.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.0.0"
}
}
},
"QuantEngine.Application/1.0.0": {
"dependencies": {
"QuantEngine.Core": "1.0.0"
@@ -89,12 +230,26 @@
"path": "dapper/2.1.79",
"hashPath": "dapper.2.1.79.nupkg.sha512"
},
"MudBlazor/6.10.0": {
"Microsoft.Extensions.DependencyModel/10.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Dpjouo3MVva4p8Nh2VCzHzvzReWhnzmCBNlrhymeXjn6oBEtT3Oi9z/R2sHOg/jYrW/hIPKMhfZHnptilHScsw==",
"path": "mudblazor/6.10.0",
"hashPath": "mudblazor.6.10.0.nupkg.sha512"
"sha512": "sha512-RFYJR7APio/BiqdQunRq6DB+nDB6nc2qhHr77mlvZ0q0BT8PubMXN7XicmfzCbrDE/dzhBnUKBRXLTcqUiZDGg==",
"path": "microsoft.extensions.dependencymodel/10.0.0",
"hashPath": "microsoft.extensions.dependencymodel.10.0.0.nupkg.sha512"
},
"Microsoft.FluentUI.AspNetCore.Components/5.0.0-rc.4-26177.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-y7k8ib6ar+1l7Rc8IdBe5aLWzFPF09ruazr+nB/GZw1Zefehddt7qXhbQzCCRyV7GCTBY3HvV7ms08ChRaeUfQ==",
"path": "microsoft.fluentui.aspnetcore.components/5.0.0-rc.4-26177.1",
"hashPath": "microsoft.fluentui.aspnetcore.components.5.0.0-rc.4-26177.1.nupkg.sha512"
},
"Microsoft.FluentUI.AspNetCore.Components.Icons/5.0.0-rc.4-26177.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-99ZPWwDcdEL/o6vmtbi7A+TzjpiOE2DxUJD/McesJTIGEZT8Iohh8URJvgpA8SR8W4tB+9wSfqZMXMCuaWi5aA==",
"path": "microsoft.fluentui.aspnetcore.components.icons/5.0.0-rc.4-26177.1",
"hashPath": "microsoft.fluentui.aspnetcore.components.icons.5.0.0-rc.4-26177.1.nupkg.sha512"
},
"Npgsql/10.0.3": {
"type": "package",
@@ -103,6 +258,69 @@
"path": "npgsql/10.0.3",
"hashPath": "npgsql.10.0.3.nupkg.sha512"
},
"Serilog/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-+cDryFR0GRhsGOnZSKwaDzRRl4MupvJ42FhCE4zhQRVanX0Jpg6WuCBk59OVhVDPmab1bB+nRykAnykYELA9qQ==",
"path": "serilog/4.3.0",
"hashPath": "serilog.4.3.0.nupkg.sha512"
},
"Serilog.AspNetCore/10.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-a/cNa1mY4On1oJlfGG1wAvxjp5g7OEzk/Jf/nm7NF9cWoE7KlZw1GldrifUBWm9oKibHkR7Lg/l5jy3y7ACR8w==",
"path": "serilog.aspnetcore/10.0.0",
"hashPath": "serilog.aspnetcore.10.0.0.nupkg.sha512"
},
"Serilog.Extensions.Hosting/10.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-E7juuIc+gzoGxgzFooFgAV8g9BfiSXNKsUok9NmEpyAXg2odkcPsMa/Yo4axkJRlh0se7mkYQ1GXDaBemR+b6w==",
"path": "serilog.extensions.hosting/10.0.0",
"hashPath": "serilog.extensions.hosting.10.0.0.nupkg.sha512"
},
"Serilog.Extensions.Logging/10.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-vx0kABKl2dWbBhhqAfTOk53/i8aV/5VaT3a6il9gn72Wqs2pM7EK2OB6No6xdqK2IaY6Zf9gdjLuK9BVa2rT+Q==",
"path": "serilog.extensions.logging/10.0.0",
"hashPath": "serilog.extensions.logging.10.0.0.nupkg.sha512"
},
"Serilog.Formatting.Compact/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-wQsv14w9cqlfB5FX2MZpNsTawckN4a8dryuNGbebB/3Nh1pXnROHZov3swtu3Nj5oNG7Ba+xdu7Et/ulAUPanQ==",
"path": "serilog.formatting.compact/3.0.0",
"hashPath": "serilog.formatting.compact.3.0.0.nupkg.sha512"
},
"Serilog.Settings.Configuration/10.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LNq+ibS1sbhTqPV1FIE69/9AJJbfaOhnaqkzcjFy95o+4U+STsta9mi97f1smgXsWYKICDeGUf8xUGzd/52/uA==",
"path": "serilog.settings.configuration/10.0.0",
"hashPath": "serilog.settings.configuration.10.0.0.nupkg.sha512"
},
"Serilog.Sinks.Console/6.1.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8jbqgjUyZlfCuSTaJk6lOca465OndqOz3KZP6Cryt/IqZYybyBu7GP0fE/AXBzrrQB3EBmQntBFAvMVz1COvAA==",
"path": "serilog.sinks.console/6.1.1",
"hashPath": "serilog.sinks.console.6.1.1.nupkg.sha512"
},
"Serilog.Sinks.Debug/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-4BzXcdrgRX7wde9PmHuYd9U6YqycCC28hhpKonK7hx0wb19eiuRj16fPcPSVp0o/Y1ipJuNLYQ00R3q2Zs8FDA==",
"path": "serilog.sinks.debug/3.0.0",
"hashPath": "serilog.sinks.debug.3.0.0.nupkg.sha512"
},
"Serilog.Sinks.File/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fKL7mXv7qaiNBUC71ssvn/dU0k9t0o45+qm2XgKAlSt19xF+ijjxyA3R6HmCgfKEKwfcfkwWjayuQtRueZFkYw==",
"path": "serilog.sinks.file/7.0.0",
"hashPath": "serilog.sinks.file.7.0.0.nupkg.sha512"
},
"QuantEngine.Application/1.0.0": {
"type": "project",
"serviceable": false,
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -13,10 +13,10 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("QuantEngine.Web")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+325c6d64e17702c514691d989194bc4dc0d08460")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+aad4788e8430ad7244d0628047aaf40d0590ef95")]
[assembly: System.Reflection.AssemblyProductAttribute("QuantEngine.Web")]
[assembly: System.Reflection.AssemblyTitleAttribute("QuantEngine.Web")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// MSBuild WriteCodeFragment 클래스에서 생성되었습니다.
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +1 @@
cb8ab21efbcec9c201bb4643c76b5e8873821d21fc9970abd6d2a8b567b63809
f65fdbf5ae13b230002b1911966d3803d46022cf6234aa717189fff95ad3d9d1
@@ -8,13 +8,14 @@ build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property.EntryPointFilePath =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = QuantEngine.Web
build_property.RootNamespace = QuantEngine.Web
build_property.ProjectDir = C:\Temp\data_feed\src\dotnet\QuantEngine.Web\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.RazorLangVersion = 9.0
build_property.RazorLangVersion = 10.0
build_property.SupportLocalizedComponentNames =
build_property.GenerateRazorMetadataSourceChecksumAttributes =
build_property.MSBuildProjectDirectory = C:\Temp\data_feed\src\dotnet\QuantEngine.Web
@@ -26,10 +27,6 @@ build_property.EnableCodeStyleSeverity =
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xBcHAucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/Counter.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xDb3VudGVyLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/Dashboard.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xEYXNoYm9hcmQucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
@@ -42,8 +39,8 @@ build_metadata.AdditionalFiles.CssScope =
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xOb3RGb3VuZC5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/Weather.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xXZWF0aGVyLnJhem9y
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/Operations.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xPcGVyYXRpb25zLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Routes.razor]
@@ -1 +1 @@
88d0f7af4412902652f47d047de48cda1a0ecc11278a5659d99a578ea7a960e4
0e1d6e7f1c84fdbf2e852a7227f82a6008223f92775fb884340ae9e6fac59f0f
@@ -30,54 +30,7 @@ C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\scopedcss\Compone
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\scopedcss\Components\Layout\ReconnectModal.razor.rz.scp.css
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\scopedcss\bundle\QuantEngine.Web.styles.css
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\scopedcss\projectbundle\QuantEngine.Web.bundle.scp.css
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\dgr8mv739g-{0}-bqjiyaj88i-bqjiyaj88i.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\l0f1c41wbh-{0}-c2jlpeoesf-c2jlpeoesf.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\ny3xbgedo0-{0}-erw9l3u2r3-erw9l3u2r3.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\yyzux970us-{0}-aexeepp0ev-aexeepp0ev.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\s8tfmvcl6l-{0}-d7shbmvgxk-d7shbmvgxk.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\buy0lgnna4-{0}-ausgxo2sd3-ausgxo2sd3.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\rftpckz71e-{0}-k8d9w2qqmf-k8d9w2qqmf.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\1xufxwh45d-{0}-cosvhxvwiu-cosvhxvwiu.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\110gjqadz3-{0}-ub07r2b239-ub07r2b239.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\moveir2wlt-{0}-fvhpjtyr6v-fvhpjtyr6v.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\i5gc3220r3-{0}-b7pk76d08c-b7pk76d08c.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\xhunqdkvqb-{0}-fsbi9cje9m-fsbi9cje9m.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\gomvvqnjlm-{0}-rzd6atqjts-rzd6atqjts.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\c34v41vs4l-{0}-ee0r1s7dh0-ee0r1s7dh0.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\0p7lrldjgj-{0}-dxx9fxp4il-dxx9fxp4il.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\0auc0xnlsy-{0}-jd9uben2k1-jd9uben2k1.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\pbeu27ik9w-{0}-khv3u5hwcm-khv3u5hwcm.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\79raj0bcrr-{0}-r4e9w2rdcm-r4e9w2rdcm.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\jqrauj2svw-{0}-lcd1t2u6c8-lcd1t2u6c8.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\pj5n2mkkzw-{0}-c2oey78nd0-c2oey78nd0.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\dt9lb9me9i-{0}-tdbxkamptv-tdbxkamptv.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\lwh7ckeki7-{0}-j5mq2jizvt-j5mq2jizvt.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\4cblaxq6jh-{0}-06098lyss8-06098lyss8.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\44s2eqp64d-{0}-nvvlpmu67g-nvvlpmu67g.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\gcxof6xqvd-{0}-s35ty4nyc5-s35ty4nyc5.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\z9wv7fs72k-{0}-pj5nd1wqec-pj5nd1wqec.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\4072jq1i2h-{0}-46ein0sx1k-46ein0sx1k.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\a4eqfiv3ub-{0}-v0zj4ognzu-v0zj4ognzu.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\rg0bjkw6wb-{0}-37tfw0ft22-37tfw0ft22.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\jomvpxly64-{0}-hrwsygsryq-hrwsygsryq.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\u4l44l4mup-{0}-pk9g2wxc8p-pk9g2wxc8p.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\s45yklcy5s-{0}-ft3s53vfgj-ft3s53vfgj.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\ryegp6ubqi-{0}-6cfz1n2cew-6cfz1n2cew.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\gfm26p5c1q-{0}-6pdc2jztkx-6pdc2jztkx.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\wh1z5habmz-{0}-493y06b0oq-493y06b0oq.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\oog3rser0x-{0}-iovd86k7lj-iovd86k7lj.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\dd5v02aqjc-{0}-vr1egmr9el-vr1egmr9el.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\61rmegrlmv-{0}-kbrnm935zg-kbrnm935zg.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\0x3oeluflx-{0}-jj8uyg4cgr-jj8uyg4cgr.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\h7pf8rqo63-{0}-y7v9cxd14o-y7v9cxd14o.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\a1937s5xj1-{0}-notf2xhcfb-notf2xhcfb.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\a7rq2yiqop-{0}-h1s4sie4z3-h1s4sie4z3.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\ykh8zi7pka-{0}-63fj8s7r0e-63fj8s7r0e.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\8q9g0t5yrl-{0}-0j3bgjxly4-0j3bgjxly4.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\t9yb5ynpxl-{0}-13ja33weya-13ja33weya.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\nr5locadir-{0}-j8lzlu28q6-j8lzlu28q6.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\dym80g6kqp-{0}-u1n4jc5v46-u1n4jc5v46.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\b7jn6yc0gz-{0}-yi314np04p-yi314np04p.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\vpvw6nj9ax-{0}-yi314np04p-yi314np04p.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\staticwebassets.build.json
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\staticwebassets.build.json.cache
@@ -93,7 +46,39 @@ C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\ref\QuantEngine.W
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Dapper.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Npgsql.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\q2w3mddmwi-{0}-hhus5bms5i-hhus5bms5i.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\MudBlazor.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\tzxjg6is5z-{0}-vfkweikjak-vfkweikjak.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\0wz98yz2xy-{0}-zz3vgy03mq-zz3vgy03mq.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Temp\ui_test_results.json
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Microsoft.Extensions.DependencyModel.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Microsoft.FluentUI.AspNetCore.Components.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Microsoft.FluentUI.AspNetCore.Components.Icons.Color.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Microsoft.FluentUI.AspNetCore.Components.Icons.Filled.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Microsoft.FluentUI.AspNetCore.Components.Icons.Light.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Microsoft.FluentUI.AspNetCore.Components.Icons.Regular.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Microsoft.FluentUI.AspNetCore.Components.Icons.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Serilog.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Serilog.AspNetCore.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Serilog.Extensions.Hosting.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Serilog.Extensions.Logging.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Serilog.Formatting.Compact.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Serilog.Settings.Configuration.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Serilog.Sinks.Console.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Serilog.Sinks.Debug.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Serilog.Sinks.File.dll
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\jsmodules\jsmodules.build.manifest.json
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\klh9ieqob8-{0}-iyd2uar0up-iyd2uar0up.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\f3i2l0jv30-{0}-iddw5cjyql-iddw5cjyql.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\6mwvvlkmgj-{0}-s7fspo1leq-s7fspo1leq.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\h0qxm5u0yy-{0}-qpepyjfzgz-qpepyjfzgz.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\win2gt64sq-{0}-x8xhhr7jgv-x8xhhr7jgv.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\ru2nohmkoz-{0}-ghr9dc63gi-ghr9dc63gi.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\4m8jx7ixl4-{0}-nvqi1h5n7i-nvqi1h5n7i.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\mm8wr5jb95-{0}-asn2ffubki-asn2ffubki.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\jq2jihf5fr-{0}-7jrmyk289x-7jrmyk289x.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\is0nail857-{0}-rdaq2hquit-rdaq2hquit.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\ib5axksgx0-{0}-o9w0qkfcrf-o9w0qkfcrf.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\oc0evn85jv-{0}-t1fy3wrmof-t1fy3wrmof.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\6nn42apl8y-{0}-acio4t06fh-acio4t06fh.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\kwrall9b0s-{0}-p1atgyms84-p1atgyms84.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\bnqbmxev8p-{0}-uhfllo7vmv-uhfllo7vmv.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\nr5locadir-{0}-ne14ti1q68-ne14ti1q68.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\dym80g6kqp-{0}-ig5xotzpx5-ig5xotzpx5.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\ctztv6q6p6-{0}-jdfzv2q2bu-jdfzv2q2bu.gz
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\b7jn6yc0gz-{0}-xny4mnot63-xny4mnot63.gz

Some files were not shown because too many files have changed in this diff Show More