Aller au contenu principal

Ajouter une route backend

Pattern standard

Toutes les routes sont dans Router.ps1. Chaque groupe de routes est une fonction Invoke-*Routes.

1. Choisir le bon groupe

GroupeFonctionQuand l'utiliser
CatalogueInvoke-CatalogRoutesLecture/écriture du catalogue
LeadsInvoke-LeadsRoutesOpérations sur les leads
MailInvoke-MailRoutesInteractions Outlook
FichiersInvoke-FileRoutesServir des fichiers

2. Ajouter le handler dans la fonction

function Invoke-LeadsRoutes($method, $pathOnly, $q, $body) {
# ... routes existantes ...

if ($pathOnly -eq '/api/ma-route' -and $method -eq 'POST') {
$payload = $body | ConvertFrom-Json
return New-JsonResponse (Ma-Fonction $q['id'] $payload)
}
}

3. Créer la fonction métier dans le module approprié

# Dans Leads.ps1
function Ma-Fonction($id, $payload) {
$lead = Get-LeadDetail $id
# ... logique ...
return @{ ok = $true }
}

Conventions

CasCode
Succèsreturn New-JsonResponse @{ ... }
Erreur métierthrow "Message d'erreur lisible" — catchée → HTTP 500
Ressource introuvablereturn New-TextResponse '404 Not Found' 'message'
Route non matchéereturn $null — le dispatcher essaie le groupe suivant

Exemple complet — export CSV des leads

# Dans Router.ps1 → Invoke-LeadsRoutes
if ($pathOnly -eq '/api/leads/export' -and $method -eq 'GET') {
return New-JsonResponse (Export-LeadsCsv)
}

# Dans Leads.ps1
function Export-LeadsCsv {
$leads = Get-AllLeads
$csv = $leads | ConvertTo-Csv -NoTypeInformation
return @{ csv = ($csv -join "`n") }
}

Ajouter un nouveau groupe de routes

Si aucun groupe existant ne convient :

# 1. Créer la fonction dans Router.ps1
function Invoke-StatsRoutes($method, $pathOnly, $q, $body) {
if ($pathOnly -eq '/api/stats' -and $method -eq 'GET') {
return New-JsonResponse (Get-Stats)
}
}

# 2. L'ajouter au tableau du dispatcher dans Handle-Request
$handlers = @(
{ Invoke-CatalogRoutes $method $pathOnly $q $body },
{ Invoke-LeadsRoutes $method $pathOnly $q $body },
{ Invoke-MailRoutes $method $pathOnly $q $body },
{ Invoke-StatsRoutes $method $pathOnly $q $body }, # ← nouveau
{ Invoke-FileRoutes $method $pathOnly $q $body }
)
Les fichiers statiques en dernier

Invoke-FileRoutes doit toujours rester le dernier handler — il sert de fallback pour les assets et l'index.html.