54 lines
1.8 KiB
C#
54 lines
1.8 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Registration.API.RequestModels;
|
|
using Registration.API.Services;
|
|
using Registration.API.Validation;
|
|
using Registration.Domain.Models;
|
|
|
|
namespace Registration.API.Controllers;
|
|
|
|
[Route("api/[controller]")]
|
|
[ApiController]
|
|
public class VolunteerController(IVbytesVolunteerRelayService relayService) : ControllerBase
|
|
{
|
|
private readonly IVbytesVolunteerRelayService _relayService = relayService;
|
|
|
|
[HttpPost("register")]
|
|
public async Task<IActionResult> RegisterVolunteer([FromBody] VolunteerRegistrationRequest request, CancellationToken cancellationToken)
|
|
{
|
|
var normalizedPhone = request.PhoneNumber.NormalizePhone();
|
|
|
|
var trimmedAreas = request.AreasOfInterest
|
|
.Select(area => area.Name.Trim())
|
|
.Where(name => !string.IsNullOrWhiteSpace(name))
|
|
.ToList();
|
|
|
|
if (trimmedAreas.Count == 0)
|
|
{
|
|
ModelState.AddModelError(nameof(request.AreasOfInterest), "At least one valid area of interest is required.");
|
|
}
|
|
|
|
if (!ModelState.IsValid)
|
|
{
|
|
return ValidationProblem(ModelState);
|
|
}
|
|
|
|
var volunteer = new Volunteer
|
|
{
|
|
FirstName = request.FirstName.Trim(),
|
|
SurName = request.SurName.Trim(),
|
|
PhoneNumber = normalizedPhone,
|
|
Email = request.Email.Trim(),
|
|
HasApprovedGdpr = request.HasApprovedGdpr!.Value,
|
|
AreasOfInterest = trimmedAreas.Select(name => new AreaOfInterest { Name = name }).ToList()
|
|
};
|
|
|
|
var result = await _relayService.RegisterVolunteerAsync(volunteer, cancellationToken);
|
|
|
|
if (result.Success && !result.Message.Contains("401"))
|
|
{
|
|
return Ok();
|
|
}
|
|
|
|
return Unauthorized();
|
|
}
|
|
}
|