BookShare est une plateforme collaborative de partage de livres développée avec Laravel 12, permettant aux utilisateurs de partager, emprunter et découvrir des livres dans leur communauté.
- Gestion des Livres : Ajout, modification, suppression et recherche de livres
- Système de Catégories : Organisation des livres par catégories avec icônes FontAwesome
- Auteurs : Gestion des auteurs avec biographies et photos
- Emprunts : Système complet de gestion des emprunts (pending, approved, returned, cancelled)
- Avis et Notes : Reviews avec système de notation 5 étoiles et commentaires
- Book Clubs : Création et gestion de clubs de lecture
- Événements : Organisation d'événements (discussions, rencontres d'auteurs, etc.)
- Défis de Lecture : Reading challenges avec objectifs et suivi
- Sondages : Création de polls pour les membres des clubs
- Système de Messagerie : Communication entre utilisateurs avec support PDF
- Interface d'Administration : Dashboard complet avec statistiques et notifications
- 🤖 Rapport AI Analytique : Génération automatique de rapports avec Mistral AI
- 📄 Export PDF Professionnel : Rapports PDF avec branding ESPRIT optimisés pour impression
- Actualités Littéraires : Récupération automatique de news depuis des sources externes
- Gestion des Utilisateurs : Système de rôles (Admin, Modérateur, Utilisateur)
- Interface Multilingue : Support français et anglais
- Design Responsive : Interface adaptée à tous les écrans
- Localisation : Gestion des emplacements pour échanges de livres
- Backend : Laravel 12, PHP 8.2
- Frontend : Blade, Bootstrap 5, JavaScript, Vite
- Base de données : MySQL 8.0
- Cache : Redis
- Serveur Web : Nginx
- Containerisation : Docker & Docker Compose
- IA : Mistral AI pour l'analyse de données
- PDF : DomPDF pour la génération de rapports
- APIs Externes : New York Times, The Guardian, BBC Culture (actualités littéraires)
- Docker Desktop installé
- Git
- Cloner le projet
git clone <votre-repo>
cd bookshare- Démarrer avec Docker
# Arrêter les conteneurs existants
docker-compose down
# Construire et démarrer les services
docker-compose build --no-cache
docker-compose up -d
# Vérifier le statut
docker-compose ps- Exécuter les migrations et seeders
# Exécuter les migrations
docker-compose exec app php artisan migrate
# Créer les utilisateurs de test
docker-compose exec app php artisan db:seed --class=AdminUserSeeder
# Exécuter tous les seeders pour les données complètes
docker-compose exec app php artisan db:seed
# Récupérer les actualités littéraires (optionnel)
docker-compose exec app php artisan news:fetch- Accéder à l'application
- Application : http://localhost:8000
- Base de données : localhost:3306
- Redis : localhost:6379
# Voir les logs
docker-compose logs -f app
# Accéder au shell du conteneur
docker-compose exec app bash
# Arrêter les services
docker-compose down
# Redémarrer les services
docker-compose restart
# Nettoyer complètement
docker-compose down -v- PHP 8.2+
- Composer
- Node.js 18+
- MySQL 8.0+
- Redis
- Cloner et installer les dépendances
git clone <votre-repo>
cd bookshare
composer install
npm install- Configuration de l'environnement
# Copier le fichier d'environnement
cp .env.example .env
# Générer la clé d'application
php artisan key:generate
# Configurer la base de données dans .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=bookshare
DB_USERNAME=root
DB_PASSWORD=your_password
# Configurer Redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379- Base de données et assets
# Créer la base de données
php artisan migrate
# Construire les assets
npm run build
# Exécuter les seeders pour les données complètes
php artisan db:seed
# Récupérer les actualités littéraires (optionnel)
php artisan news:fetch- Démarrer l'application
# Serveur de développement
php artisan serve
# En arrière-plan (optionnel)
php artisan queue:workAprès avoir exécuté les seeders, vous pouvez vous connecter avec :
| Rôle | Mot de passe | |
|---|---|---|
| 👑 Administrateur | hamdikbaier8@gmail.com | admin123 |
| 🛡️ Modérateur | moderator@bookshare.com | moderator123 |
| 👤 Utilisateur | user@bookshare.com | user123 |
# Créer uniquement les utilisateurs de test
php artisan db:seed --class=AdminUserSeeder
# Exécuter tous les seeders (recommandé)
php artisan db:seed
# Seeders individuels pour données spécifiques
php artisan db:seed --class=BookSeeder
php artisan db:seed --class=CategorySeeder
php artisan db:seed --class=AuthorSeeder
php artisan db:seed --class=LocationSeeder
php artisan db:seed --class=BookClubSeeder
php artisan db:seed --class=EventSeeder
php artisan db:seed --class=ReadingChallengeSeeder
php artisan db:seed --class=PollSeeder
php artisan db:seed --class=ReviewSeeder
php artisan db:seed --class=BorrowingSeeder
# Commandes pour actualités littéraires
php artisan news:fetch # Récupérer les news depuis les APIs externes
php artisan news:clear # Nettoyer les news anciennes# Voir le statut des migrations
php artisan migrate:status
# Exécuter les migrations
php artisan migrate
# Annuler la dernière migration
php artisan migrate:rollback
# Nettoyer le cache
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
# Voir les routes
php artisan route:list
# Accéder à Tinker
php artisan tinker
# Commandes spécifiques BookShare
php artisan news:fetch # Récupérer actualités littéraires
php artisan news:clear # Nettoyer news anciennes
php artisan queue:work # Traiter les tâches en arrière-plan
php artisan schedule:run # Exécuter les tâches programmées
# Commandes Docker spécifiques
docker-compose exec app php artisan migrate:fresh --seed # Reset complet DB + seeders
docker-compose exec app php artisan config:cache # Cache config en production
docker-compose exec app php artisan route:cache # Cache routes en productionbookshare/
├── app/
│ ├── Http/Controllers/ # Contrôleurs (Admin, API, etc.)
│ │ └── AdminReportController.php # 🤖 Rapport AI Analytique
│ ├── Models/ # Modèles Eloquent
│ ├── Helpers/ # Helpers (MarkdownHelper, etc.)
│ ├── Console/Commands/ # Commandes Artisan (news:fetch)
│ └── ...
├── database/
│ ├── migrations/ # Migrations de base de données
│ └── seeders/ # Seeders pour les données de test
│ ├── AdminUserSeeder.php
│ ├── BookClubSeeder.php
│ ├── EventSeeder.php
│ ├── ReadingChallengeSeeder.php
│ ├── PollSeeder.php
│ ├── ReviewSeeder.php
│ ├── BorrowingSeeder.php
│ └── ...
├── resources/
│ ├── views/ # Vues Blade
│ │ └── admin/reports/ # 📄 Templates pour rapports PDF
│ ├── components/ # Composants Blade réutilisables
│ └── sass/ # Styles SCSS
├── public/
│ ├── assets/img/ # Logos (esprit-logo.png, bookshare-logo.svg)
│ └── assets/css/ # CSS personnalisé (sb-admin-2.css)
├── docker/ # Configuration Docker
├── Dockerfile # Image Docker
├── docker-compose.yml # Orchestration Docker
└── README.md # Ce fichier
- app : Application Laravel (PHP 8.2-FPM)
- nginx : Serveur web (port 8000)
- db : Base de données MySQL 8.0 (port 3306)
- redis : Cache Redis (port 6379)
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000
DB_HOST=db
DB_DATABASE=bookshare
DB_USERNAME=root
DB_PASSWORD=password
REDIS_HOST=redis
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
# Configuration Mistral AI (pour rapports analytiques)
MISTRAL_API_KEY=your_mistral_api_key_here
MISTRAL_API_URL=https://api.mistral.ai/v1/chat/completions
# APIs pour actualités littéraires
NYT_API_KEY=your_nyt_api_key_here
GUARDIAN_API_KEY=your_guardian_api_key_here
BBC_API_KEY=your_bbc_api_key_here-
Erreur "Class Redis not found"
- L'extension Redis n'est pas installée ou configurée
- Solution : Reconstruire l'image Docker ou utiliser
SESSION_DRIVER=file
-
Erreur de connexion à la base de données
- Vérifier que MySQL est démarré
- Vérifier les paramètres de connexion dans .env
- En Docker : s'assurer que
.envcorrespond aux variables dudocker-compose.yml
-
Assets non chargés
- Exécuter
npm run buildounpm run dev - Vérifier que Vite est configuré correctement
- Exécuter
-
Permissions insuffisantes
- Vérifier les permissions sur le dossier storage/
- Exécuter
chmod -R 755 storage bootstrap/cache
-
Erreur "Access denied for user 'root'" en Docker
- Le fichier
.envdans le conteneur ne correspond pas audocker-compose.yml - Solution : Vérifier les variables d'environnement dans le conteneur
- Le fichier
-
Rapport AI ne se génère pas
- Vérifier que
MISTRAL_API_KEYest configuré dans.env - Vérifier la connectivité internet pour l'API Mistral
- Vérifier que
-
Erreur "Maximum execution time exceeded"
- Le script prend trop de temps (déjà résolu avec
set_time_limit(120)) - Si persistant, augmenter
max_execution_timedansphp.ini
- Le script prend trop de temps (déjà résolu avec
# Logs Docker
docker-compose logs -f app
docker-compose logs -f nginx
docker-compose logs -f db
# Logs Laravel
tail -f storage/logs/laravel.log
# Vérifier la configuration
php artisan config:showL'API REST est disponible sur /api/ avec les endpoints suivants :
GET /api/books- Liste des livresPOST /api/books- Créer un livreGET /api/categories- Liste des catégoriesPOST /api/categories- Créer une catégorie
GET /admin/reports/ai-analytics- 🤖 Génération du rapport AI analytiqueGET /admin/reports/download-pdf- 📄 Téléchargement du rapport PDF
php artisan news:fetch- Récupération des actualités littérairesphp artisan news:clear- Nettoyage des actualités anciennes
Le système génère automatiquement des rapports d'analyse avec Mistral AI :
- Accès : Dashboard Admin → "Generate AI Report"
- Fonctionnalités :
- Analyse complète de toutes les données (13 modules)
- Génération en anglais avec insights professionnels
- Export PDF optimisé pour impression
- Branding ESPRIT intégré
- Templates optimisés : Marges professionnelles (25mm), numérotation
- Branding : Logo ESPRIT et BookShare intégrés
- Contenu : Table des matières, métriques clés, analyse détaillée
- Format : A4, prêt pour impression
13 modules de données :
- Books, Users, Borrowings, Reviews, Authors
- Categories, Locations, News, Challenges
- Book Clubs, Events, Polls, Messages
Seeders optimisés :
- Données réalistes pour tous les modules
- Respect des contraintes d'intégrité
- Évite les doublons et erreurs
- Thème marron : Couleurs personnalisées (brown #8B4513)
- Modal de chargement : Animation pendant génération AI
- Responsive : Optimisé pour tous les écrans
- Fork le projet
- Créer une branche feature (
git checkout -b feature/AmazingFeature) - Commit vos changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Hamdi Kbaier
- Email: hamdikbaier8@gmail.com
- GitHub: @hamdikbaier
- Laravel Framework
- Bootstrap
- FontAwesome
- Tous les contributeurs du projet
BookShare - Partagez vos livres, partagez vos connaissances ! 📚✨