Files
MadJax 0e6a97ca61 Renommage : TrajetKmTracker -> SchotzIadKmTracker (backend, specs, frontend)
- Backend : projets, solution, namespaces et références
  TrajetKmTracker.Api/.Tests -> SchotzIadKmTracker.Api/.Tests
  (dossiers, .csproj, .sln, .http, namespaces C#). GUID UserSecretsId préservé.
- Specs : dossier .kiro/specs/trajet-km-tracker -> schotziad-km-tracker
  et mise à jour des références internes (chemins, tags de propriétés).
- Frontend : projet Angular trajet-km-tracker -> schotziad-km-tracker
  (package.json, angular.json, chemin dist, Dockerfile), titre applicatif
  'SchotzIAD KM Tracker'.
- Docker et scripts (backend/Dockerfile, frontend/Dockerfile, run-dev.sh) mis à jour.
- Suppression du fichier résiduel package.json.bak.

Backend (solution) et frontend (build production) compilent sans erreur.
2026-09-14 07:50:26 +02:00

54 lines
1.9 KiB
C#

using Microsoft.AspNetCore.Mvc;
using SchotzIadKmTracker.Api.Models.DTOs;
using SchotzIadKmTracker.Api.Services;
namespace SchotzIadKmTracker.Api.Controllers;
/// <summary>
/// Endpoints de gestion du profil utilisateur (singleton) et de son état de configuration.
/// </summary>
[ApiController]
[Route("api/profil")]
public class ProfilController : ControllerBase
{
private readonly IProfilService _profilService;
public ProfilController(IProfilService profilService)
{
_profilService = profilService;
}
/// <summary>Récupère le profil (créé à la volée s'il est absent).</summary>
[HttpGet]
[ProducesResponseType(typeof(ProfilDto), StatusCodes.Status200OK)]
public async Task<ActionResult<ProfilDto>> GetProfil(CancellationToken cancellationToken)
{
var profil = await _profilService.GetProfilAsync(cancellationToken);
return Ok(profil);
}
/// <summary>
/// Sauvegarde le profil. La validation du matricule (≤ 8 car.) est assurée par FluentValidation.
/// Le géocodage de l'Adresse_Domicile est effectué au mieux : un échec BAN n'empêche pas la sauvegarde.
/// </summary>
[HttpPut]
[ProducesResponseType(typeof(ProfilDto), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<ProfilDto>> SaveProfil(
[FromBody] SaveProfilDto dto,
CancellationToken cancellationToken)
{
var profil = await _profilService.SaveProfilAsync(dto, cancellationToken);
return Ok(profil);
}
/// <summary>État de configuration du profil (onboarding).</summary>
[HttpGet("etat")]
[ProducesResponseType(typeof(EtatProfilDto), StatusCodes.Status200OK)]
public async Task<ActionResult<EtatProfilDto>> GetEtat(CancellationToken cancellationToken)
{
var etat = await _profilService.GetEtatAsync(cancellationToken);
return Ok(etat);
}
}