petitspas/frontend/lib/services/api/api_config.dart
Julien Martin 671da71752 feat(#112): reprise après refus via lien e-mail (/reprise?token=)
Branche le flux front : chargement du dossier, session reprise, wizards
parent/AM préremplis et resoumission via reprise-resoumettre.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 16:28:41 +02:00

92 lines
3.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:p_tits_pas/config/env.dart';
class ApiConfig {
/// Aligné sur [Env.apiBaseUrl] (`--dart-define=API_BASE_URL=...`) pour que les images `/uploads/...` visent le même hôte que lAPI.
static String get baseUrl {
final root = Env.apiBaseUrl.replaceAll(RegExp(r'/+$'), '');
return '$root/api/v1';
}
/// Origine (schéma + hôte + port) dérivée de [baseUrl], pour préfixer les chemins `/uploads/...`.
static String get apiOrigin {
final uri = Uri.parse(baseUrl);
if (uri.hasScheme && uri.host.isNotEmpty) {
return '${uri.scheme}://${uri.authority}';
}
return baseUrl.replaceAll(RegExp(r'/api/v1/?.*'), '');
}
/// URL absolue pour une image renvoyée par lAPI (chemin type `/uploads/...`).
/// On préfixe avec [baseUrl] (…/api/v1), pas seulement lhôte : Traefik nexpose souvent que `/api`.
static String absoluteMediaUrl(String? pathOrUrl) {
if (pathOrUrl == null || pathOrUrl.trim().isEmpty) {
return '';
}
final u = pathOrUrl.trim();
if (u.startsWith('http://') || u.startsWith('https://')) {
return u;
}
final base = baseUrl.replaceAll(RegExp(r'/+$'), '');
// Le back renvoie parfois des chemins déjà préfixés `/api/v1/...` (ex. documents
// légaux). Ne pas les coller à [baseUrl] sous peine de doubler `/api/v1`.
if (u.startsWith('/api/')) {
final origin = apiOrigin.replaceAll(RegExp(r'/+$'), '');
return '$origin$u';
}
return u.startsWith('/') ? '$base$u' : '$base/$u';
}
// Auth endpoints
static const String login = '/auth/login';
static const String register = '/auth/register';
static const String registerParent = '/auth/register/parent';
static const String registerAM = '/auth/register/am';
static const String refreshToken = '/auth/refresh';
static const String authMe = '/auth/me';
static const String changePasswordRequired = '/auth/change-password-required';
static const String verifyCreatePasswordToken = '/auth/verify-token';
static const String createPassword = '/auth/create-password';
/// Ticket #127 — mot de passe oublié (back à livrer en parallèle).
static const String forgotPassword = '/auth/forgot-password';
static const String resetPassword = '/auth/reset-password';
/// Ticket #112 — reprise après refus (#111 back).
static const String repriseDossier = '/auth/reprise-dossier';
static const String repriseResoumettre = '/auth/reprise-resoumettre';
// Users endpoints
static const String users = '/users';
static const String userProfile = '/users/profile';
static const String userChildren = '/users/children';
static const String gestionnaires = '/gestionnaires';
static const String parents = '/parents';
static const String assistantesMaternelles = '/assistantes-maternelles';
static const String relais = '/relais';
static const String dossiers = '/dossiers';
// Configuration (admin)
static const String configuration = '/configuration';
static const String configurationSetupStatus = '/configuration/setup/status';
static const String configurationSetupComplete =
'/configuration/setup/complete';
static const String configurationTestSmtp = '/configuration/test-smtp';
static const String configurationBulk = '/configuration/bulk';
// Dashboard endpoints
static const String dashboard = '/dashboard';
static const String events = '/events';
static const String contracts = '/contracts';
static const String conversations = '/conversations';
static const String notifications = '/notifications';
// Headers
static Map<String, String> get headers => {
'Content-Type': 'application/json',
'Accept': 'application/json',
};
static Map<String, String> authHeaders(String token) => {
...headers,
'Authorization': 'Bearer $token',
};
}