Add FormValidationService and EventDefinitionService to dependency injection

Enhanced the application's service layer by adding FormValidationService and EventDefinitionService to the dependency injection container in Program.cs. Updated Create, Edit, and other relevant components to utilize these services for improved form validation and event processing functionality.
This commit is contained in:
2025-12-28 19:56:16 -05:00
parent 0358763601
commit 065a83442c
11 changed files with 642 additions and 200 deletions
+44 -52
View File
@@ -3,8 +3,13 @@
@using WebApp.Components.Shared.Components
@using Core.Utility
@using Microsoft.EntityFrameworkCore
@using MudBlazor
@using WebApp.Services
@inject AppDbContext context
@inject NavigationManager NavigationManager
@inject ISnackbar Snackbar
@inject FormValidationService ValidationService
@inject EventDefinitionService EventDefinitionService
<PageHeader
Title="Create"
@@ -12,10 +17,12 @@
ShowBackButton="true"
BackButtonUrl="@(ReturnUrl ?? "/events")" />
<EditForm Model="EventDefinition" OnValidSubmit="OnValidSubmit" Enhance>
<EditForm EditContext="@_editContext" OnValidSubmit="OnValidSubmit" OnInvalidSubmit="OnInvalidSubmit" Enhance>
<FormChangeTracker @ref="_formChangeTracker" />
<AntiforgeryToken />
<DataAnnotationsValidator />
<ValidationErrorDisplay Errors="_validationErrors" />
<MudStack Spacing="4">
<MudPaper Elevation="2" Class="pa-6">
@@ -111,67 +118,52 @@
private EventDefinition EventDefinition { get; set; } = new();
private FormChangeTracker? _formChangeTracker;
private EditContext? _editContext;
private List<string> _validationErrors = new();
protected override void OnInitialized()
{
_editContext = new EditContext(EventDefinition);
}
private void OnInvalidSubmit(EditContext editContext)
{
_validationErrors = ValidationService.HandleInvalidSubmit(editContext, EventDefinition, errors => _validationErrors = errors);
StateHasChanged();
}
private async Task OnValidSubmit()
{
_formChangeTracker?.AllowNavigation();
// Normalize and process related careers
await ProcessRelatedCareersAsync(EventDefinition);
context.Events.Add(EventDefinition);
await context.SaveChangesAsync();
NavigationManager.NavigateTo(ReturnUrl ?? "/events");
}
private async Task ProcessRelatedCareersAsync(EventDefinition eventDefinition)
{
if (string.IsNullOrWhiteSpace(eventDefinition.RelatedCareersText))
{
eventDefinition.RelatedCareers.Clear();
return;
}
var normalizedNames = CareerNormalizer.NormalizeCareerNames(eventDefinition.RelatedCareersText).ToList();
_validationErrors.Clear();
if (!normalizedNames.Any())
try
{
eventDefinition.RelatedCareers.Clear();
return;
}
// Normalize and process related careers
await EventDefinitionService.ProcessRelatedCareersAsync(EventDefinition);
// Get all existing careers from database (case-insensitive lookup)
var existingCareers = await context.Careers.ToListAsync();
var careerLookup = existingCareers.ToDictionary(
c => CareerNormalizer.GetNormalizedKey(c.Name),
c => c,
StringComparer.OrdinalIgnoreCase);
var careersToAdd = new List<Career>();
foreach (var normalizedName in normalizedNames)
{
var normalizedKey = CareerNormalizer.GetNormalizedKey(normalizedName);
context.Events.Add(EventDefinition);
await context.SaveChangesAsync();
if (careerLookup.TryGetValue(normalizedKey, out var existingCareer))
{
// Use existing career (preserve original capitalization)
careersToAdd.Add(existingCareer);
}
else
{
// Create new career with the normalized name (preserving capitalization from input)
var newCareer = new Career { Name = normalizedName };
context.Careers.Add(newCareer);
careersToAdd.Add(newCareer);
careerLookup[normalizedKey] = newCareer;
}
Snackbar.Add($"Event '{EventDefinition.Name}' created successfully.", Severity.Success);
_formChangeTracker?.AllowNavigation();
NavigationManager.NavigateTo(ReturnUrl ?? "/events");
}
catch (DbUpdateException ex)
{
ValidationService.HandleDbUpdateException(
ex,
"An error occurred while creating the event.",
"event",
"creating",
"name");
}
catch (Exception ex)
{
ValidationService.HandleException(ex);
}
// Replace the collection
eventDefinition.RelatedCareers = careersToAdd;
}
private void HandleCancel()
{
_formChangeTracker?.AllowNavigation();