# 🚀 Guide d'Intégration API - EduConnect Africa > Développé par **Marino ATOHOUN** pour **Hypee** ## 📋 Vue d'ensemble Ce document détaille comment utiliser les services API frontend pour communiquer avec le backend Django REST Framework. --- ## 🔐 Authentification ### Configuration L'authentification utilise **JWT (JSON Web Tokens)** avec refresh automatique. ```typescript import { authService } from './services'; // Connexion await authService.login('email@example.com', 'password'); // Les tokens sont automatiquement stockés dans localStorage // Inscription await authService.register('John Doe', 'email@example.com', 'password', UserRole.STUDENT); // Récupérer l'utilisateur connecté const user = await authService.getCurrentUser(); // Mettre à jour le profil await authService.updateProfile({ name: 'Nouveau nom', country: 'Bénin' }); // Déconnexion authService.logout(); ``` --- ## 💬 Forum / Questions ### Récupérer les questions ```typescript import { forumService } from './services'; // Toutes les questions (avec pagination) const { count, results } = await forumService.getQuestions({ page: 1, search: 'algorithme', filter: 'unsolved', // 'solved' | 'unsolved' | undefined tag: 'python' }); // Une question spécifique const question = await forumService.getQuestion('123'); // Créer une question const newQuestion = await forumService.createQuestion({ title: 'Comment optimiser mon code ?', content: 'J\'ai un problème de performance...', tags: ['python', 'performance'] }); // Voter pour une question await forumService.voteQuestion('123', 1); // 1 = upvote, -1 = downvote ``` --- ## 👨‍🏫 Mentors ### Recherche et profils mentors ```typescript import { mentorService } from './services'; // Liste des mentors const { count, results } = await mentorService.getMentors({ page: 1, search: 'data science', country: 'Bénin', specialty: 'Machine Learning' }); // Profil d'un mentor const mentor = await mentorService.getMentor('123'); // Mon profil mentor (si je suis mentor) const myProfile = await mentorService.getMyMentorProfile(); // Mettre à jour mon profil mentor await mentorService.updateMyMentorProfile({ bio: 'Expert en Data Science...', specialties: ['Python', 'ML'], availability: 'Lun-Ven 18h-20h' }); // Avis d'un mentor const reviews = await mentorService.getMentorReviews('123'); ``` --- ## 📅 Réservations (Bookings) ### Gérer les sessions mentor ```typescript import { bookingService } from './services'; // Mes réservations const bookings = await bookingService.getBookings({ status: 'PENDING' // PENDING | CONFIRMED | REJECTED | COMPLETED | CANCELLED }); // Créer une réservation const booking = await bookingService.createBooking({ mentor_id: '123', date: '2025-12-01', time: '18:00', domains: ['Python', 'Data Science'], expectations: 'Aide pour mon projet...', main_questions: 'Comment structurer mon code ?' }); // Mettre à jour le statut (mentor uniquement) await bookingService.updateBookingStatus('456', 'CONFIRMED', 'Je confirme notre session'); // Demandes reçues (mentors) const requests = await bookingService.getMentorRequests(); ``` --- ## 🎯 Opportunités ### Bourses, stages, concours ```typescript import { opportunityService } from './services'; // Liste des opportunités const { count, results } = await opportunityService.getOpportunities({ page: 1, type: 'SCHOLARSHIP', // SCHOLARSHIP | CONTEST | INTERNSHIP | TRAINING search: 'data' }); // Détails d'une opportunité const opportunity = await opportunityService.getOpportunity('123'); ``` --- ## 🔔 Notifications ### Gérer les notifications utilisateur ```typescript import { notificationService } from './services'; // Toutes mes notifications const notifications = await notificationService.getNotifications(); // Marquer comme lue await notificationService.markAsRead('123'); // Marquer toutes comme lues await notificationService.markAllAsRead(); // Supprimer une notification await notificationService.deleteNotification('123'); ``` --- ## ⚙️ Configuration & Gestion des Erreurs ### Intercepteurs automatiques Le client API gère automatiquement : - ✅ Ajout du token JWT à chaque requête - ✅ Rafraîchissement du token expiré - ✅ Redirection vers /login si authentification échouée - ✅ Gestion des erreurs réseau ### Exemple de gestion d'erreurs ```typescript try { const questions = await forumService.getQuestions(); } catch (error: any) { if (error.response?.status === 401) { // Non authentifié console.error('Veuillez vous connecter'); } else if (error.response?.status === 403) { // Accès refusé console.error('Vous n\'avez pas les permissions'); } else if (error.response?.status === 404) { // Non trouvé console.error('Ressource introuvable'); } else { // Autre erreur console.error('Erreur:', error.message); } } ``` --- ## 🌐 Endpoints Backend ### Base URL ``` http://127.0.0.1:8000/api/ ``` ### Endpoints disponibles | Module | Méthode | Endpoint | Description | |--------|---------|----------|-------------| | **Auth** | | | POST | `/auth/register/` | Inscription utilisateur | | | POST | `/auth/login/` | Connexion utilisateur | | | GET | `/auth/me/` | Utilisateur connecté | | | PATCH | `/auth/profile/` | Mise à jour profil | | **Forum** | | | GET | `/forum/questions/` | Liste questions | | | POST | `/forum/questions/` | Créer question | | | GET | `/forum/questions/{id}/` | Détails question | | | POST | `/forum/questions/{id}/vote/` | Voter | | **Mentors** | | | GET | `/mentors/` | Liste mentors | | | GET | `/mentors/{id}/` | Profil mentor | | | GET | `/mentors/my_profile/` | Mon profil (mentor) | | | PATCH | `/mentors/my_profile/` | Modifier profil | | **Bookings** | | | GET | `/bookings/` | Mes réservations | | | POST | `/bookings/` | Créer réservation | | | PATCH | `/bookings/{id}/update_status/` | Changer statut | | | GET | `/bookings/mentor_requests/` | Demandes reçues | | **Opportunities** | | | GET | `/opportunities/` | Liste opportunités | | | GET | `/opportunities/{id}/` | Détails | | **Notifications** | | | GET | `/notifications/` | Mes notifications | | | PATCH | `/notifications/{id}/mark_read/` | Marquer lue | | | POST | `/notifications/mark_all_read/` | Tout marquer | | | DELETE | `/notifications/{id}/` | Supprimer | --- ## 🧪 Tests Recommandés ### Scénario complet 1. ✅ Inscription d'un étudiant 2. ✅ Connexion 3. ✅ Consultation des questions 4. ✅ Création d'une question 5. ✅ Recherche de mentors 6. ✅ Réservation d'une session 7. ✅ Consultation des opportunités 8. ✅ Vérification des notifications --- ## 📚 Ressources - **Documentation Swagger:** http://127.0.0.1:8000/api/docs/ - **Documentation ReDoc:** http://127.0.0.1:8000/api/redoc/ - **Schema OpenAPI:** http://127.0.0.1:8000/api/schema/ --- *Développé avec ❤️ par Marino ATOHOUN pour Hypee*