@page "/events/create"
@attribute [Authorize]
@using WebApp.Components.Shared.Components
@using Core.Utility
@using Microsoft.EntityFrameworkCore
@inject AppDbContext context
@inject NavigationManager NavigationManager
Basic Information
Event Format
@foreach (EventFormat format in Enum.GetValues(typeof(EventFormat)))
{
@format.ToString()
}
Event Details
Team Configuration
Competition Details
Create
Cancel
@code {
[SupplyParameterFromQuery]
private string? ReturnUrl { get; set; }
[SupplyParameterFromForm]
private EventDefinition EventDefinition { get; set; } = new();
private FormChangeTracker? _formChangeTracker;
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();
if (!normalizedNames.Any())
{
eventDefinition.RelatedCareers.Clear();
return;
}
// 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();
foreach (var normalizedName in normalizedNames)
{
var normalizedKey = CareerNormalizer.GetNormalizedKey(normalizedName);
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;
}
}
// Replace the collection
eventDefinition.RelatedCareers = careersToAdd;
}
private void HandleCancel()
{
_formChangeTracker?.AllowNavigation();
NavigationManager.NavigateTo(ReturnUrl ?? "/events");
}
}