a0313687da
- File: WebApp/ChapterSettings.cs - Change: Renamed StateContainer.UserId to ScheduledTeams - Impact: Property name now accurately reflects what it stores 2. ✅ Added Structured Logging with Serilog - Packages Added: - Serilog.AspNetCore - Serilog.Sinks.Console - Serilog.Sinks.File - Files Modified: - Program.cs - Added Serilog configuration with console and file logging - appsettings.json - Added Serilog minimum log levels - appsettings.Development.json - Added Debug level logging for development - Benefits: - Structured log output for better parsing/analysis - Automatic file rotation (daily, 30 days retention) - Logs stored in logs/webapp-.txt - Better formatted console output 3. ✅ Added Global Error Handling - File Created: WebApp/Components/Shared/AppErrorBoundary.razor - File Modified: WebApp/Components/App.razor - Features: - Catches unhandled exceptions throughout the app - Shows detailed error info in Development environment - Shows user-friendly message in Production - Logs errors automatically - Provides "Return to Home" button 4. ✅ Enhanced Input Validation - File Modified: WebApp/Components/Login.razor - Validations Added: - Email: Required, valid email format, max 100 chars, regex validation - Password: Required, min 8 chars, max 100 chars - Benefits: - Client-side validation before submission - Clear error messages for users - Prevents invalid data submission
56 lines
2.2 KiB
Plaintext
56 lines
2.2 KiB
Plaintext
@using Microsoft.AspNetCore.Components.Web
|
|
|
|
<ErrorBoundary>
|
|
<ChildContent>
|
|
@ChildContent
|
|
</ChildContent>
|
|
<ErrorContent Context="ex">
|
|
<MudContainer MaxWidth="MaxWidth.Medium" Class="mt-8">
|
|
<MudPaper Elevation="3" Class="pa-6">
|
|
<MudAlert Severity="Severity.Error" Variant="Variant.Filled">
|
|
<MudText Typo="Typo.h5" Class="mb-2">
|
|
<MudIcon Icon="@Icons.Material.Filled.Error" Class="mr-2" />
|
|
An Error Occurred
|
|
</MudText>
|
|
@if (ShowDetails)
|
|
{
|
|
<MudText Typo="Typo.body2" Class="mt-4">
|
|
<strong>Error:</strong> @ex.Message
|
|
</MudText>
|
|
<MudText Typo="Typo.caption" Class="mt-2">
|
|
<strong>Stack Trace:</strong>
|
|
<pre style="overflow-x: auto;">@ex.StackTrace</pre>
|
|
</MudText>
|
|
}
|
|
else
|
|
{
|
|
<MudText Typo="Typo.body2">
|
|
Something went wrong. Please try refreshing the page or contact support if the problem persists.
|
|
</MudText>
|
|
}
|
|
</MudAlert>
|
|
<MudButton Variant="Variant.Filled"
|
|
Color="Color.Primary"
|
|
Class="mt-4"
|
|
OnClick="@(() => Navigation.NavigateTo("/", forceLoad: true))">
|
|
Return to Home
|
|
</MudButton>
|
|
</MudPaper>
|
|
</MudContainer>
|
|
</ErrorContent>
|
|
</ErrorBoundary>
|
|
|
|
@code {
|
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
|
[Inject] private IWebHostEnvironment Environment { get; set; } = default!;
|
|
[Inject] private NavigationManager Navigation { get; set; } = default!;
|
|
[Inject] private ILogger<AppErrorBoundary> Logger { get; set; } = default!;
|
|
|
|
private bool ShowDetails => Environment.IsDevelopment();
|
|
|
|
protected override void OnParametersSet()
|
|
{
|
|
Logger.LogError("Error boundary triggered");
|
|
}
|
|
}
|