Compare commits

..

No commits in common. "111935e4512fc5bcd7a85380e6075a1ce66e19a9" and "8e8c6d79b1800cc226650311e69e6b3e603493f7" have entirely different histories.

4 changed files with 11 additions and 12 deletions

View File

@ -53,7 +53,8 @@ export class ConfigController {
// @Roles('super_admin') // @Roles('super_admin')
async completeSetup(@Request() req: any) { async completeSetup(@Request() req: any) {
try { try {
const userId = req.user?.id ?? null; // TODO: Récupérer l'ID utilisateur depuis le JWT
const userId = req.user?.id || 'system';
await this.configService.markSetupCompleted(userId); await this.configService.markSetupCompleted(userId);

View File

@ -259,10 +259,10 @@ export class AppConfigService implements OnModuleInit {
/** /**
* Marquer la configuration initiale comme terminée * Marquer la configuration initiale comme terminée
* @param userId ID de l'utilisateur qui termine la configuration (null si non authentifié) * @param userId ID de l'utilisateur qui termine la configuration
*/ */
async markSetupCompleted(userId: string | null): Promise<void> { async markSetupCompleted(userId: string): Promise<void> {
await this.set('setup_completed', 'true', userId ?? undefined); await this.set('setup_completed', 'true', userId);
this.logger.log('✅ Configuration initiale marquée comme terminée'); this.logger.log('✅ Configuration initiale marquée comme terminée');
} }

View File

@ -6,7 +6,7 @@ class Env {
); );
// Construit une URL vers l'API v1 à partir d'un chemin (commençant par '/') // Construit une URL vers l'API v1 à partir d'un chemin (commençant par '/')
static String apiV1(String path) => '$apiBaseUrl/api/v1$path'; static String apiV1(String path) => "${apiBaseUrl}/api/v1$path";
} }

View File

@ -1,11 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:p_tits_pas/services/auth_service.dart';
/// Barre du dashboard admin : onglets Gestion des utilisateurs | Paramètres + déconnexion. /// Barre principale du dashboard admin : 2 onglets (Gestion des utilisateurs | Paramètres) + infos utilisateur.
class DashboardAppBarAdmin extends StatelessWidget implements PreferredSizeWidget { class DashboardAppBarAdmin extends StatelessWidget implements PreferredSizeWidget {
final int selectedIndex; final int selectedIndex;
final ValueChanged<int> onTabChange; final ValueChanged<int> onTabChange;
/// Si false, l'onglet "Gestion des utilisateurs" est grisé et inaccessible.
final bool setupCompleted; final bool setupCompleted;
const DashboardAppBarAdmin({ const DashboardAppBarAdmin({
@ -116,10 +115,9 @@ class DashboardAppBarAdmin extends StatelessWidget implements PreferredSizeWidge
child: const Text('Annuler'), child: const Text('Annuler'),
), ),
ElevatedButton( ElevatedButton(
onPressed: () async { onPressed: () {
Navigator.pop(context); Navigator.pop(context);
await AuthService.logout(); // TODO: Implémenter la logique de déconnexion
if (context.mounted) context.go('/login');
}, },
child: const Text('Déconnecter'), child: const Text('Déconnecter'),
), ),
@ -129,7 +127,7 @@ class DashboardAppBarAdmin extends StatelessWidget implements PreferredSizeWidge
} }
} }
/// Sous-barre : Gestionnaires | Parents | Assistantes maternelles | Administrateurs. /// Sous-barre affichée quand "Gestion des utilisateurs" est actif : 4 onglets sans infos utilisateur.
class DashboardUserManagementSubBar extends StatelessWidget { class DashboardUserManagementSubBar extends StatelessWidget {
final int selectedSubIndex; final int selectedSubIndex;
final ValueChanged<int> onSubTabChange; final ValueChanged<int> onSubTabChange;