Aller au contenu principal

Admin (admin-stageconnect)

Application Next.js pour l'administration de la plateforme. Permet de gérer les utilisateurs, entreprises, universités, analyser les données, gérer les incidents et configurer le système.

Stack Technique

Framework et langage :

  • Next.js 16.1.6 (App Router)
  • React 19.2.3
  • TypeScript 5.9.3

Librairies principales :

CatégorieLibrairies
UIRadix UI, Lucide React, Tailwind CSS
État@tanstack/react-query v5.90.21
Themingnext-themes v0.4.6
Animationsframer-motion v12.34.2
Datedayjs, flatpickr
Graphiquesapexcharts, react-apexcharts, jsvectormap
Utilsreact-hot-toast, cmdk (command palette), react-media-recorder

Outils de build :

  • Tailwind CSS 3.4.19
  • PostCSS 8.5.6
  • ESLint 9.39.2 + eslint-config-next

Prérequis et Installation

Prérequis

  • Node.js 18+
  • npm ou pnpm

Installation

# Cloner le repo
git clone https://github.com/stageconnect/admin-stageconnect.git
cd admin-stageconnect

# Installer les dépendances
npm install

# Variables d'environnement
cp .env.local.example .env.local
# Modifier NEXT_PUBLIC_API_URL si nécessaire

# Lancer en développement
npm run dev

Build production

npm run build
npm start

Structure du Projet

admin-stageconnect/
├── app/ # Pages Next.js (App Router)
│ ├── (dashboard)/ # Route group dashboard
│ │ ├── analytics/
│ │ ├── bugs/
│ │ ├── dashboard/
│ │ ├── documents/
│ │ ├── incidents/
│ │ ├── logs/
│ │ ├── messages/
│ │ ├── offers/
│ │ ├── pricing/
│ │ ├── reports/
│ │ ├── roles/
│ │ ├── settings/
│ │ ├── users/
│ │ ├── validations/
│ │ └── layout.tsx
│ ├── login/ # Page connexion
│ ├── layout.tsx
│ ├── providers.tsx
│ ├── middleware.ts
│ └── page.tsx
├── components/
│ ├── ui/ # Composants UI base
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ ├── input.tsx
│ │ ├── table.tsx
│ │ └── ...
│ ├── admin/ # Composants admin
│ │ ├── analytics/
│ │ ├── bugs/
│ │ ├── dashboard/
│ │ ├── users/
│ │ ├── companies/
│ │ └── ...
│ ├── auth/
│ ├── common/
│ │ └── Feedback/
│ ├── Forms/
│ └── Layouts/
├── contexts/
│ ├── AuthContext.tsx # Authentification
│ └── CompanyContext.tsx # Données entreprise
├── hooks/
│ ├── useAuth.ts
│ ├── useAuthActions.ts
│ ├── useFormValidation.ts
│ ├── useThemes.ts
│ ├── useMultiStepForm.ts
│ ├── useRateLimiting.ts
│ ├── useBugReport.ts
│ ├── useContactForm.ts
│ ├── useMobile.ts
│ └── useClickOutside.ts
├── services/
│ ├── api.config.ts
│ ├── token.service.ts
│ ├── auth.api.ts
│ ├── admin.service.ts
│ ├── admin/
│ │ ├── dashboard.service.ts
│ │ ├── users.service.ts
│ │ ├── companies.service.ts
│ │ ├── universities.service.ts
│ │ └── ...
│ ├── student.*.services.ts (15+)
│ ├── company.*.services.ts (10+)
│ ├── mentor.*.services.ts (8+)
│ └── university.*.services.ts (8+)
├── providers/
│ └── QueryProvider.tsx # TanStack Query
├── lib/
├── utils/
├── types/
└── constants/

Architecture et Principes SOLID

SRP (Single Responsibility Principle)

Bien respecté.

Exemples :

  • hooks/useFormValidation.ts — Validation uniquement
  • services/token.service.ts — Tokens uniquement

Violation potentielle :

  • components/admin/dashboard/AdminDashboardStatic.tsx — Affiche des messages de test ("100% FONCTIONNEL") — composant factice/non terminé
  • Doublons lib/ et utils/ —两者 font la même chose

OCP (Open/Closed Principle)

Bien respecté via class-variance-authority.

Exemple :

// components/ui/button.tsx
const buttonVariants = cva(...);
// Extensible via props variant et size

LSP (Liskov Substitution Principle)

Non applicable — Pas d'héritage de classes.

ISP (Interface Segregation Principle)

Bien respecté.

Props des composants bien segmentées.

DIP (Dependency Inversion Principle)

Bien respecté.

Exemple :

// contexts/AuthContext.tsx
// Dépend d'abstractions (authApiService, tokenService)
// Injection via imports

Patterns Utilisés

Custom Hooks (15+ fichiers)

HookFichierRôle
useAuthhooks/useAuth.tsAuthentification
useAuthActionshooks/useAuthActions.tsActions auth
useAuthForgotPasswordhooks/useAuthForgotPassword.tsMot de passe oublié
useAuthRegisterhooks/useAuthRegister.tsInscription
useFormValidationhooks/useFormValidation.tsValidation formulaires
useMultiStepFormhooks/useMultiStepForm.tsFormulaires multi-étapes
useRateLimitinghooks/useRateLimiting.tsRate limiting
useBugReporthooks/useBugReport.tsSignalement bugs
useContactFormhooks/useContactForm.tsFormulaire contact
useThemeshooks/useThemes.tsGestion themes
useUserAvatarhooks/useUserAvatar.tsAvatar utilisateur
useMobilehooks/use-mobile.tsDétection mobile
useClickOutsidehooks/use-click-outside.tsDétection clic extérieur

Context Providers

ProviderFichierRôle
AuthProvidercontexts/AuthContext.tsxAuthentification
CompanyProvidercontexts/CompanyContext.tsxDonnées entreprise
QueryProviderproviders/QueryProvider.tsxTanStack Query
SidebarProvidercomponents/Layouts/sidebar/sidebar-context.tsxGestion sidebar

Compound Components

Non détectés.

HOC

Non détectés.

Gestion de l'État

Outils utilisés :

  • TanStack Query — Cache et requêtes API (staleTime 5min, gcTime 10min, retry 2)
  • React Context — AuthContext, CompanyContext, SidebarContext
  • useState/useEffect — État local

Pas de Redux, Zustand, ou autre librairie.

Appels API

Bibliothèque

Fetch API native (pas Axios).

Configuration

Fichier : services/api.config.ts

const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000/api/v1';

Token JWT

Fichier : services/token.service.ts

  • Stockage : localStorage + cookies
  • Méthodes : saveTokens, getAccessToken, isAccessTokenExpired, clearTokens, etc.
  • Refresh automatique : toutes les 60s avec buffer de 5 min
  • Durée refresh token : 7 jours

Erreurs

Chaque service gère ses propres erreurs. Pas de gestionnaire centralisé.

Variables d'Environnement

VariableDescriptionValeur par défaut
NEXT_PUBLIC_API_URLURL du backendhttps://api.stageconnect.app/api/v1
NEXT_PUBLIC_SITE_URLURL du sitehttps://admin.stageconnect.app

Lacunes et Dette Technique

LacuneFichier concernéPrioritéSuggestion
Doublons servicesauth.services.ts et auth.api.tsFaibleFusionner ou supprimer
Duplication API_URLChaque service redefinit la constanteHauteImporter depuis api.config.ts
Composant facticeAdminDashboardStatic.tsxHauteImplémenter ou supprimer
lib/ et utils/ redondantsLes deux contiennent des utilitairesFaibleConsolider en un seul dossier
Pas de testsAucun dossier testsHauteAjouter Jest + Testing Library
Pas de storybookPas de documentation composantsMoyenneAjouter Storybook
Pas de gestion erreurs centraliséeChaque service gère ses erreursMoyenneCréer error-handler global
Middleware incompletVérifie présence token, pas le rôle adminMoyenneAjouter vérification rôle
Versions Next.js 16 / React 19Très récentes, peut être instableFaibleSurveiller les mises à jour