Une entreprise souhaite développer une plateforme en ligne permettant aux utilisateurs de partager des connaissances, de se former mutuellement et de suivre leurs progrès. L'API REST servira de backend pour des applications web et mobiles, offrant une expérience utilisateur sécurisée et performante.
- Développer une API RESTful avec Laravel 11 pour gérer les cours, mentors, élèves, communautés, catégories, sous-catégories et tags
- Permettre aux utilisateurs de créer des cours, s'inscrire à des formations, suivre leur progression et obtenir des badges
- Fournir une interface d'administration sécurisée pour la gestion des ressources pédagogiques
- Concevoir des endpoints structurés pour les opérations CRUD sur toutes les entités
- Implémenter un système d'authentification robuste pour protéger les données sensibles
- Gérer efficacement les rôles et permissions (administrateurs, mentors, élèves)
- Intégrer un système de notifications pour informer les utilisateurs des mises à jour importantes
- Création et gestion complète de cours par les mentors (nom, description, durée, niveau de difficulté)
- Association des cours aux catégories et sous-catégories appropriées
- Gestion des statuts de cours (ouvert, en cours, terminé)
- Système d'inscription et suivi de progression pour les élèves
- Fonctionnalité de tagging pour faciliter la recherche et la classification
- Support pour l'intégration de multiples vidéos pédagogiques par cours
- Interface pour l'ajout et la gestion de vidéos par les mentors
- Association des vidéos à des cours spécifiques avec métadonnées (titre, description, URL)
- Système de visionnage sécurisé pour les élèves inscrits aux cours correspondants
- Fonctionnalités administratives complètes de gestion des ressources vidéo
- Structure hiérarchique de classification des cours
- Relation one-to-many entre catégories et sous-catégories
- Interface d'administration pour la gestion complète de la taxonomie
- Système de tagging flexible pour améliorer la découvrabilité des cours
- Association many-to-many entre cours et tags
- Interface d'administration pour la gestion des tags
- Tableau de bord affichant la distribution des cours par statut
- Visualisation de la répartition des cours par catégories et sous-catégories
- Métriques d'engagement et de complétion des cours
- Validation rigoureuse des données pour garantir l'intégrité et prévenir les attaques
- Gestion standardisée des erreurs avec codes HTTP appropriés et messages explicites
- Documentation complète des endpoints via Swagger
- Framework : Laravel 11
- Base de données : MySQL ou PostgreSQL
- Authentification : Laravel Sanctum
- Gestion des dépendances : Composer
- Architecture : Service Repository Pattern
- Tests : Pest pour les tests unitaires et fonctionnels
- Documentation : L5-Swagger
GET /api/v1/courses: Récupération de tous les cours (avec pagination)GET /api/v1/courses/{id}: Récupération des détails d'un cours spécifiquePOST /api/v1/courses: Création d'un nouveau coursPUT /api/v1/courses/{id}: Mise à jour d'un cours existantDELETE /api/v1/courses/{id}: Suppression d'un cours
POST /api/v1/courses/{id}/videos: Ajout d'une vidéo à un coursGET /api/v1/courses/{id}/videos: Récupération des vidéos d'un coursGET /api/v1/videos/{id}: Récupération des détails d'une vidéo spécifiquePUT /api/v1/videos/{id}: Mise à jour d'une vidéoDELETE /api/v1/videos/{id}: Suppression d'une vidéo
GET /api/v1/categories: Récupération de toutes les catégoriesGET /api/v1/categories/{id}: Récupération des détails d'une catégoriePOST /api/v1/categories: Création d'une nouvelle catégoriePUT /api/v1/categories/{id}: Mise à jour d'une catégorieDELETE /api/v1/categories/{id}: Suppression d'une catégorie
GET /api/v1/tags: Récupération de tous les tagsGET /api/v1/tags/{id}: Récupération des détails d'un tagPOST /api/v1/tags: Création d'un nouveau tagPUT /api/v1/tags/{id}: Mise à jour d'un tagDELETE /api/v1/tags/{id}: Suppression d'un tag
GET /api/v1/stats/courses: Statistiques globales sur les coursGET /api/v1/stats/categories: Analyse de la distribution par catégoriesGET /api/v1/stats/tags: Analyse de l'utilisation des tags
- PHP 8.1 ou supérieur
- Composer
- MySQL 8.0 ou PostgreSQL 14
- Node.js (pour la compilation des assets frontend si nécessaire)
-
Clonage du dépôt
git clone https://github.com/votre-utilisateur/votre-projet.git cd votre-projet -
Installation des dépendances
composer install
-
Configuration de l'environnement
- Création et configuration du fichier d'environnement
cp .env.example .env
- Configuration des paramètres de connexion à la base de données et autres variables d'environnement
-
Génération de la clé d'application
php artisan key:generate
-
Exécution des migrations et seeders
php artisan migrate --seed
php artisan serveCréation d'un modèle avec migration, contrôleur et repository
php artisan make:model NomDuModele -mcrphp artisan make:seeder NomDuSeederExécution de la suite de tests avec Pest
php artisan testcomposer require darkaonline/l5-swaggerphp artisan vendor:publish --provider="L5Swagger\L5SwaggerServiceProvider"La documentation interactive de l'API est accessible à l'adresse http://localhost:8000/api/documentation.
/**
* @OA\Get(
* path="/api/v1/courses",
* summary="Récupération de la liste des cours",
* description="Retourne une liste paginée de tous les cours disponibles",
* tags={"Cours"},
* @OA\Parameter(
* name="page",
* in="query",
* description="Numéro de page",
* required=false,
* @OA\Schema(type="integer", default=1)
* ),
* @OA\Response(
* response=200,
* description="Liste des cours récupérée avec succès",
* @OA\JsonContent(
* type="object",
* @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/Course")),
* @OA\Property(property="meta", type="object")
* )
* ),
* @OA\Response(response=401, description="Non authentifié"),
* @OA\Response(response=403, description="Accès interdit")
* )
*/
public function index()
{
// Logique pour lister les cours
}- Forkez le dépôt du projet
- Créez une branche dédiée à votre fonctionnalité (
git checkout -b feature/ma-fonctionnalite) - Committez vos modifications (
git commit -m 'Ajout de ma fonctionnalité') - Poussez la branche vers votre fork (
git push origin feature/ma-fonctionnalite) - Ouvrez une Pull Request vers le dépôt principal
Ce projet est distribué sous licence MIT. Veuillez consulter le fichier LICENSE pour plus de détails.
Pour toute question technique ou suggestion d'amélioration, veuillez contacter : mouadhallaffou@gmail.com
- Méthode : POST
- URL :
http://localhost:8000/api/V1/auth/register - Body (JSON) :
{ "name": "John Doe", "email": "john.doe@example.com", "password": "password123", "password_confirmation": "password123" }
{ "email": "john.doe@example.com", "password": "password123" }
1. Profil Utilisateur (Profile)
2. Méthode : GET
3. URL : http://localhost:8000/api/V1/auth/profile
4. Headers :
* Authorization: Bearer <token>
5. Déconnexion (Logout)
6. Méthode : POST
7. URL : http://localhost:8000/api/V1/auth/logout
8. Headers :
* Authorization: Bearer <token>
9. Rafraîchir le Token (Refresh)
10. Méthode : POST
11. URL : http://localhost:8000/api/V1/auth/refresh
12. Headers :
* Authorization: Bearer <token>
13. Mettre à Jour le Profil (Update Profile)
14. Méthode : POST
15. URL : http://localhost:8000/api/V1/auth/update-profile
16. Headers :
* Authorization: Bearer <token>
17. Body (JSON) : json Copy
{ "name": "John Updated", "email": "john.updated@example.com" } Rôles et Permissions 1. Lister tous les rôles * Méthode : GET * URL : http://localhost:8000/api/V1/roles 2. Créer un nouveau rôle * Méthode : POST * URL : http://localhost:8000/api/V1/roles * Body (JSON) : json Copy
{ "name": "editor", "permissions": ["view courses", "edit courses"] }
1. Modifier un rôle
2. Méthode : PUT
3. URL : http://localhost:8000/api/V1/roles/{id}
4. Body (JSON) : json Copy
{ "name": "supereditor", "permissions": ["delete courses"] }
- Supprimer un rôle
- Méthode : DELETE
- URL : http://localhost:8000/api/V1/roles/{id}
- Assigner un rôle à un utilisateur
- Méthode : POST
- URL : http://localhost:8000/api/V1/users/{userId}/assign-role
- Body (JSON) : json Copy
{ "role": "editor" }
1. Retirer un rôle d'un utilisateur
2. Méthode : DELETE
3. URL : http://localhost:8000/api/V1/users/{userId}/remove-role
4. Body (JSON) : json Copy
{ "role": "editor" }
- Synchroniser les permissions d'un rôle
- Méthode : PUT
- URL : http://localhost:8000/api/V1/roles/{id}/sync-permissions
- Body (JSON) : json Copy
{ "permissions": ["view courses", "edit courses"] }
Statistiques 1. Statistiques des cours * Méthode : GET * URL : http://localhost:8000/api/V1/stats/courses 2. Statistiques des catégories * Méthode : GET * URL : http://localhost:8000/api/V1/stats/categories 3. Statistiques des tags * Méthode : GET * URL : http://localhost:8000/api/V1/stats/tags Enrôlement (Inscriptions aux Cours) 1. S'inscrire à un cours * Méthode : POST * URL : http://localhost:8000/api/V1/courses/{id}/enroll * Headers : * Authorization: Bearer <token> 2. Lister les inscriptions à un cours * Méthode : GET * URL : http://localhost:8000/api/V1/courses/{id}/enrollments * Headers : * Authorization: Bearer <token> 3. Mettre à jour le statut d'une inscription * Méthode : PUT * URL : http://localhost:8000/api/V2/enrollments/{id} * Headers : * Authorization: Bearer <token> * Body (JSON) : json Copy
{ "status": "accepted" }
- Supprimer une inscription
- Méthode : DELETE
- URL : http://localhost:8000/api/V2/enrollments/{id}
- Headers :
- Authorization: Bearer