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.
This commit is contained in:
2026-09-14 07:50:26 +02:00
parent e3f946f7d4
commit 0e6a97ca61
133 changed files with 462 additions and 503 deletions
@@ -0,0 +1,18 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsque le texte d'adresse d'une Adresse_Nommee est absent, vide ou dépasse
/// 255 caractères (Exigence 15.8). Convertie en réponse HTTP 400 (Bad Request).
/// </summary>
public class AdresseNommeeInvalideException : Exception
{
public AdresseNommeeInvalideException(string message)
: base(message)
{
}
public AdresseNommeeInvalideException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,18 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'aucune Adresse_Nommee ne correspond à l'identifiant demandé
/// (modification, suppression). Convertie en réponse HTTP 404 (Not Found).
/// </summary>
public class AdresseNommeeNotFoundException : Exception
{
public AdresseNommeeNotFoundException(string message)
: base(message)
{
}
public AdresseNommeeNotFoundException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,18 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsque l'API BAN (Base Adresses Nationale) est indisponible :
/// échec réseau, réponse HTTP non réussie ou dépassement du délai (timeout).
/// </summary>
public class BANIndisponibleException : Exception
{
public BANIndisponibleException(string message)
: base(message)
{
}
public BANIndisponibleException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,20 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Signale l'absence de barème configuré pour une (puissance fiscale, année) lors d'un calcul de montant.
/// Ce n'est pas une erreur bloquante : le calcul retourne un montant zéro accompagné d'un avertissement
/// (Exigence 13.4). Le service de calcul n'a donc pas à lever cette exception pour interrompre le calcul ;
/// elle est fournie pour les cas où un appelant souhaite explicitement signaler la non-configuration.
/// </summary>
public class BaremeNonConfigureException : Exception
{
public BaremeNonConfigureException(string message)
: base(message)
{
}
public BaremeNonConfigureException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,18 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'une Date_Effet fournie pour un véhicule est postérieure à la date du jour.
/// Convertie en réponse HTTP 400 (Bad Request) — Exigence 10.11.
/// </summary>
public class DateEffetFutureException : Exception
{
public DateEffetFutureException(string message)
: base(message)
{
}
public DateEffetFutureException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,19 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'une Dénomination d'Adresse_Nommee, après normalisation (trim + minuscules +
/// suppression des accents), correspond à une Adresse_Nommee déjà enregistrée (Exigence 15.7).
/// Convertie en réponse HTTP 400 (Bad Request).
/// </summary>
public class DenominationDupliqueeException : Exception
{
public DenominationDupliqueeException(string message)
: base(message)
{
}
public DenominationDupliqueeException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,18 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'une Dénomination d'Adresse_Nommee est absente, vide ou dépasse 100 caractères
/// (Exigence 15.6). Convertie en réponse HTTP 400 (Bad Request).
/// </summary>
public class DenominationInvalideException : Exception
{
public DenominationInvalideException(string message)
: base(message)
{
}
public DenominationInvalideException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,20 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'un recalcul de la Distance échoue lors de la modification d'un Trajet.
/// Le service annule (rollback) la modification et conserve les données existantes du Trajet
/// sans modification, puis retourne cette erreur descriptive (Exigence 5.8).
/// Convertie en réponse HTTP 502 (Bad Gateway) / erreur descriptive par le contrôleur.
/// </summary>
public class DistanceRecalculException : Exception
{
public DistanceRecalculException(string message)
: base(message)
{
}
public DistanceRecalculException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,18 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'un Montant_Regle soumis est négatif. Convertie en réponse HTTP 400
/// (Bad Request) — Exigence 14.4 : « Le montant réglé ne peut pas être négatif. »
/// </summary>
public class MontantRegleNegatifException : Exception
{
public MontantRegleNegatifException(string message)
: base(message)
{
}
public MontantRegleNegatifException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,19 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsque la génération d'un Export_PDF échoue : erreur de rendu QuestPDF
/// ou dépassement du délai de 15 secondes (Exigence 7.5). Le controller la mappe
/// vers une réponse <c>503 Service Unavailable</c>.
/// </summary>
public class PdfGenerationException : Exception
{
public PdfGenerationException(string message)
: base(message)
{
}
public PdfGenerationException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,19 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'un paramètre de résumé (mois ou année) est hors des plages autorisées :
/// mois ∈ [1, 12] et année ∈ [2000, 2100]. Convertie en réponse HTTP 400 (Bad Request)
/// par le controller — Exigence 3.6.
/// </summary>
public class ResumeParametreInvalideException : Exception
{
public ResumeParametreInvalideException(string message)
: base(message)
{
}
public ResumeParametreInvalideException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,24 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'une demande de modification ou de suppression cible un Trajet inexistant.
/// Convertie en réponse HTTP 404 (Not Found) ; l'opération est bloquée et aucun Résumé_Mensuel
/// n'est mis à jour (Exigences 5.6).
/// </summary>
public class TrajetNotFoundException : Exception
{
public TrajetNotFoundException(int id)
: base($"Le trajet {id} n'existe pas.")
{
}
public TrajetNotFoundException(string message)
: base(message)
{
}
public TrajetNotFoundException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,18 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'aucune tranche de barème ne correspond à l'identifiant demandé
/// (mise à jour ou suppression). Convertie en réponse HTTP 404 (Not Found).
/// </summary>
public class TrancheBaremeNotFoundException : Exception
{
public TrancheBaremeNotFoundException(string message)
: base(message)
{
}
public TrancheBaremeNotFoundException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,19 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'une opération sur le barème produirait des tranches dont les intervalles
/// [KmMin, KmMax] se chevauchent pour une même (année, puissance fiscale).
/// Convertie en réponse HTTP 400 (Bad Request) — Exigence 13.2.
/// </summary>
public class TranchesBaremeChevauchantesException : Exception
{
public TranchesBaremeChevauchantesException(string message)
: base(message)
{
}
public TranchesBaremeChevauchantesException(string message, Exception innerException)
: base(message, innerException)
{
}
}
@@ -0,0 +1,19 @@
namespace SchotzIadKmTracker.Api.Services.Exceptions;
/// <summary>
/// Levée lorsqu'aucun véhicule ne correspond à l'identifiant demandé
/// (résolution du véhicule courant, réaffectation, etc.).
/// Convertie en réponse HTTP 404 (Not Found).
/// </summary>
public class VehiculeNotFoundException : Exception
{
public VehiculeNotFoundException(string message)
: base(message)
{
}
public VehiculeNotFoundException(string message, Exception innerException)
: base(message, innerException)
{
}
}