@page "/settings/validation"
@attribute [Authorize(Roles = AuthRoles.Administrator)]
@using Core.Validation
@using WebApp.Authentication
@using System.Text.Json
@inject IWebHostEnvironment Environment
@inject IConfiguration Configuration
@rendermode InteractiveServer
Validation Settings
Validation Settings
Configure validation rules and thresholds. Changes take effect on next application restart.
@if (_config != null)
{
Event Count Thresholds
Required Event Types
Students must have at least one regional event
Students must have at least one on-site activity
Students must have at least one individual event
Team events must have an assigned captain
Validation Severity Levels
Warning
Error
Warning
Error
Warning
Error
Warning
Error
Warning
Error
Warning
Error
Warning
Error
@if (_isSaving)
{
Saving...
}
else
{
Save Configuration
}
Reset to Defaults
@if (!string.IsNullOrEmpty(_statusMessage))
{
@_statusMessage
}
}
else
{
}
@code {
private ValidationConfiguration? _config;
private bool _isSaving;
private string? _statusMessage;
private Severity _statusSeverity = Severity.Success;
protected override void OnInitialized()
{
// Load from IConfiguration
_config = Configuration.GetSection("ValidationSettings").Get()
?? ValidationConfiguration.Default;
}
private string GetAppSettingsPath()
{
return Path.Combine(
Environment.ContentRootPath,
"Data",
"appsettings.json");
}
private async Task SaveConfiguration()
{
if (_config == null) return;
_isSaving = true;
_statusMessage = null;
try
{
var appSettingsPath = GetAppSettingsPath();
// Ensure Data directory exists
var dataDir = Path.GetDirectoryName(appSettingsPath);
if (dataDir != null && !Directory.Exists(dataDir))
{
Directory.CreateDirectory(dataDir);
}
// Read existing appsettings or create new
JsonDocument? existingDoc = null;
Dictionary settings;
if (File.Exists(appSettingsPath))
{
var existingJson = await File.ReadAllTextAsync(appSettingsPath);
existingDoc = JsonDocument.Parse(existingJson);
settings = JsonSerializer.Deserialize>(existingJson)
?? new Dictionary();
}
else
{
settings = new Dictionary();
}
// Update ValidationSettings section
settings["ValidationSettings"] = _config;
// Write back to file
var options = new JsonSerializerOptions { WriteIndented = true };
var json = JsonSerializer.Serialize(settings, options);
await File.WriteAllTextAsync(appSettingsPath, json);
existingDoc?.Dispose();
_statusMessage = "Configuration saved successfully! Changes will take effect on next application restart.";
_statusSeverity = Severity.Success;
}
catch (Exception ex)
{
_statusMessage = $"Error saving configuration: {ex.Message}";
_statusSeverity = Severity.Error;
}
finally
{
_isSaving = false;
}
}
private void ResetToDefaults()
{
_config = ValidationConfiguration.Default;
_statusMessage = "Configuration reset to defaults. Click Save to apply.";
_statusSeverity = Severity.Info;
}
}