@page "/settings/validation" @attribute [Authorize(Roles = AuthRoles.Administrator)] @using Core.Validation @using WebApp.Authentication @using WebApp.Components.Shared.Components @using System.Text.Json @inject IWebHostEnvironment Environment @inject IConfiguration Configuration @rendermode InteractiveServer @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; } }