|
- using Campaign_Tracker.Server.Authorization;
- using Campaign_Tracker.Server.Municipalities;
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Mvc;
-
- namespace Campaign_Tracker.Server.Controllers;
-
- [ApiController]
- [Authorize(Policy = ApplicationPolicy.ClientServicesAccess)]
- [Route("api/municipalities/{profileId}/prior-cycle-defaults")]
- public sealed class MunicipalityPriorCycleDefaultsController : ControllerBase
- {
- private const string EmptyMessage = "No prior cycle defaults available.";
- private readonly IMunicipalityProfileRepository _profiles;
- private readonly IMunicipalityPriorCycleDefaultsRepository _defaults;
-
- public MunicipalityPriorCycleDefaultsController(
- IMunicipalityProfileRepository profiles,
- IMunicipalityPriorCycleDefaultsRepository defaults)
- {
- _profiles = profiles;
- _defaults = defaults;
- }
-
- [HttpGet]
- public async Task<ActionResult<MunicipalityPriorCycleDefaultsResponse>> Get(
- string profileId,
- CancellationToken cancellationToken)
- {
- var profile = await _profiles.GetByIdAsync(profileId, cancellationToken);
- if (profile is null)
- return NotFound();
-
- var cycles = await _defaults.GetByJCodeAsync(
- profile.Profile.JCode,
- cancellationToken);
-
- var responseCycles = cycles
- .Select(PriorCycleResponse.From)
- .ToArray();
-
- return Ok(new MunicipalityPriorCycleDefaultsResponse(
- ProfileId: profileId,
- HasPriorCycles: responseCycles.Length > 0,
- SelectedCycleId: responseCycles.FirstOrDefault()?.CycleId,
- EmptyStateMessage: responseCycles.Length == 0 ? EmptyMessage : string.Empty,
- Cycles: responseCycles));
- }
- }
-
- public sealed record MunicipalityPriorCycleDefaultsResponse(
- string ProfileId,
- bool HasPriorCycles,
- string? SelectedCycleId,
- string EmptyStateMessage,
- IReadOnlyList<PriorCycleResponse> Cycles);
-
- public sealed record PriorCycleResponse(
- string CycleId,
- string CycleName,
- string CompletedAt,
- IReadOnlyList<PriorCycleServiceResponse> Services)
- {
- public static PriorCycleResponse From(MunicipalityPriorCycleDefaults cycle) =>
- new(
- cycle.CycleId,
- cycle.CycleName,
- cycle.CompletedAt.ToString("O"),
- cycle.Services.Select(PriorCycleServiceResponse.From).ToArray());
- }
-
- public sealed record PriorCycleServiceResponse(
- string ServiceType,
- string Summary,
- IReadOnlyDictionary<string, string> Values)
- {
- public static PriorCycleServiceResponse From(MunicipalityPriorCycleServiceDefault service) =>
- new(service.ServiceType, service.Summary, service.Values);
- }
|