# LeDiscord - Plateforme communautaire pour groupe d'amis

## 🎯 Description

LeDiscord est une plateforme web privée pour gérer la vie sociale d'un groupe d'amis. Elle permet de :

- 📹 **Vlogs** : Partager des vlogs vidéo avec le groupe
- 📸 **Albums** : Créer des albums photos/vidéos pour les soirées et vacances
- 📅 **Événements** : Organiser des événements avec système de présence
- 💬 **Publications** : Poster des actualités et mentionner des amis
- 📊 **Statistiques** : Visualiser des stats fun sur le groupe
- 👥 **Taux de présence** : Suivre la participation aux événements
- 🔔 **Notifications** : Recevoir des alertes par email et dans l'app
- 🛡️ **Admin** : Dashboard pour gérer l'espace de stockage et les utilisateurs
- 🎫 **Tickets** : Système de support et de gestion des demandes
- ℹ️ **Informations** : Gestion d'informations publiques et privées

## 🚀 Technologies

### Backend
- **Python 3.11** avec FastAPI
- **PostgreSQL** pour la base de données
- **JWT** pour l'authentification
- **SQLAlchemy** comme ORM
- **Alembic** pour les migrations
- **Celery** pour les tâches asynchrones (notifications)
- **PIL (Pillow)** pour le traitement d'images
- **OpenCV** pour la génération de miniatures vidéo

### Frontend
- **Vue.js 3** avec Composition API
- **Vite** pour le build
- **Tailwind CSS** pour le style
- **Pinia** pour la gestion d'état
- **Vue Router** pour la navigation
- **Axios** pour les appels API

### Infrastructure
- **Docker** et Docker Compose
- **Volumes mappés** pour le stockage des médias

## 📁 Structure du projet

```
LeDiscord/
├── backend/
│   ├── api/routers/     # Routes API (auth, events, albums, etc.)
│   ├── models/           # Modèles SQLAlchemy
│   ├── schemas/          # Schémas Pydantic
│   ├── config/           # Configuration
│   ├── utils/            # Utilitaires (sécurité, email, etc.)
│   └── app.py           # Application principale
├── frontend/
│   ├── src/
│   │   ├── views/        # Pages Vue
│   │   ├── layouts/      # Layouts de l'app
│   │   ├── stores/       # Stores Pinia
│   │   ├── router/       # Configuration du router
│   │   └── utils/        # Utilitaires
│   └── package.json
├── uploads/              # Dossier des médias uploadés (mappé sur NAS)
├── docker-compose.yml    # Configuration Docker
├── Makefile              # Commandes utiles
├── env.example           # Variables d'environnement d'exemple
└── README.md
```

## 🛠️ Installation et démarrage

### Prérequis
- Docker et Docker Compose installés
- Port 8000 (backend), 5173 (frontend) et 5432 (PostgreSQL) disponibles
- Git pour cloner le projet

### 1. **Cloner le projet**
```bash
git clone <votre-repo-github>
cd LeDiscord
```

### 2. **Configuration de l'environnement**
```bash
# Copier le fichier d'exemple
cp env.example .env

# Éditer le fichier .env avec vos valeurs
nano .env
```

**Variables importantes à modifier :**
- `DB_PASSWORD` : Mot de passe fort pour la base de données
- `JWT_SECRET_KEY` : Clé secrète très longue et aléatoire
- `ADMIN_PASSWORD` : Mot de passe admin (à changer absolument !)
- `SMTP_USER` et `SMTP_PASSWORD` : Configuration email (optionnel)

### 3. **Démarrer l'application**
```bash
# Démarrer tous les services
make start

# Ou manuellement
docker-compose up --build -d
```

### 4. **Accéder à l'application**
- **Frontend** : http://localhost:5173
- **API Docs** : http://localhost:8000/docs
- **Admin** : Se connecter avec les identifiants admin définis dans `.env`

## 👤 Compte administrateur par défaut
- Email : `admin@lediscord.com`
- Mot de passe : Celui défini dans votre fichier `.env`

## 🔧 Développement

### Commandes utiles (Makefile)
```bash
make help              # Afficher l'aide
make start             # Démarrer l'application
make stop              # Arrêter l'application
make restart           # Redémarrer l'application
make logs              # Voir les logs
make build             # Reconstruire les images Docker
make clean             # Nettoyer les conteneurs et volumes
make install           # Installer les dépendances localement
```

### Développement local
```bash
# Backend
make dev-backend

# Frontend
make dev-frontend
```

### Accès aux conteneurs
```bash
make shell-backend     # Shell dans le conteneur backend
make shell-db          # psql dans PostgreSQL
```

## 📝 Fonctionnalités principales

### Authentification
- Inscription/Connexion avec JWT
- Tokens d'accès sécurisés
- Protection des routes
- Gestion des permissions admin/user

### Événements
- Création d'événements avec date, lieu, description
- Système de présence (présent/absent/peut-être)
- Notifications automatiques aux membres
- Taux de présence calculé automatiquement

### Albums & Médias
- Upload de photos/vidéos
- Albums liés aux événements
- Génération automatique de miniatures
- Gestion de l'espace de stockage
- Support multi-fichiers avec drag & drop

### Vlogs
- Upload de vidéos
- Compteur de vues
- Miniatures personnalisées
- Génération automatique de miniatures

### Publications
- Posts avec mentions d'utilisateurs
- Notifications lors des mentions
- Timeline chronologique
- Support des images

### Statistiques
- Taux de présence par utilisateur
- Membre le plus actif
- Statistiques fun personnalisables

### Administration
- Dashboard de gestion
- Monitoring de l'espace disque
- Gestion des utilisateurs
- Nettoyage des fichiers orphelins
- Gestion des tickets de support

### Tickets
- Système de support complet
- Gestion des priorités et statuts
- Upload de captures d'écran
- Notes administrateur
- Assignation aux admins

### Informations
- Gestion d'informations publiques/privées
- Système de catégories
- Priorités d'affichage
- Interface d'administration

## 🔐 Sécurité

- Authentification JWT
- Mots de passe hashés avec bcrypt
- Protection CORS configurée
- Validation des types de fichiers
- Limitation de la taille des uploads
- Permissions par rôle (admin/user)
- Variables d'environnement sécurisées

## 🚧 Roadmap / Améliorations futures

- [ ] Application mobile (React Native ou PWA)
- [ ] Notifications push sur mobile
- [ ] Chat en temps réel
- [ ] Calendrier partagé
- [ ] Sondages et votes
- [ ] Cagnotte pour les événements
- [ ] Export des photos d'un événement
- [ ] Mode sombre
- [ ] Système de likes/réactions
- [ ] Historique d'activité détaillé

## 📋 Checklist de déploiement

### Avant de commiter sur GitHub
- [ ] Vérifier que `.env` est dans `.gitignore`
- [ ] Vérifier que `uploads/` est dans `.gitignore`
- [ ] Vérifier que `postgres_data/` est dans `.gitignore`
- [ ] Tester que l'application démarre correctement

### Sur la nouvelle machine
- [ ] Cloner le repository
- [ ] Copier `env.example` vers `.env`
- [ ] Modifier les variables dans `.env`
- [ ] Lancer `make start`
- [ ] Vérifier l'accès à l'application

## 🐛 Dépannage

### Problèmes courants
1. **Ports déjà utilisés** : Vérifiez que 8000, 5173 et 5432 sont libres
2. **Permissions Docker** : Assurez-vous d'être dans le groupe docker
3. **Variables d'environnement** : Vérifiez que `.env` est correctement configuré
4. **Base de données** : Vérifiez que PostgreSQL peut démarrer

### Logs et debugging
```bash
make logs              # Voir tous les logs
make logs-backend      # Logs du backend uniquement
make logs-frontend     # Logs du frontend uniquement
make logs-db           # Logs de la base de données
```

## 📄 Licence

Projet privé - Tous droits réservés

## 🤝 Contact

Pour toute question sur le projet, contactez l'administrateur.

---

**Note** : Ce projet est conçu pour un usage privé entre amis. Assurez-vous de configurer correctement la sécurité avant tout déploiement en production.
