801e6a050b
- Documentation archivée et réorganisée - Backend: Ajout tests, migrations, library service, rate limiting - Frontend: Suppression Flutter, focus sur interface web HTML/JS - Tailwind CSS ajouté pour le style - Améliorations UX et corrections bugs Generated with [Claude Code](https://claude.com/claude-code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
270 lines
6.5 KiB
Markdown
270 lines
6.5 KiB
Markdown
# 🎵 AudiOhm
|
|
|
|
**Alternative à Spotify avec streaming YouTube**
|
|
|
|
Une application web moderne de streaming musical utilisant FastAPI (backend) et HTML/JavaScript (frontend), avec streaming audio depuis YouTube.
|
|
|
|
---
|
|
|
|
## 🚀 Démarrage Rapide
|
|
|
|
### Prérequis
|
|
|
|
- Python 3.13+
|
|
- PostgreSQL 14+
|
|
- pip et venv
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Cloner le repository
|
|
git clone https://github.com/votre-username/audiOhm.git
|
|
cd audiOhm
|
|
|
|
# Installer les dépendances backend
|
|
cd backend
|
|
python -m venv venv
|
|
source venv/bin/activate # Windows: venv\Scripts\activate
|
|
pip install -r requirements.txt
|
|
|
|
# Configurer la base de données
|
|
cp .env.example .env
|
|
# Éditer .env avec vos paramètres de base de données
|
|
|
|
# Lancer les migrations
|
|
alembic upgrade head
|
|
|
|
# Créer un utilisateur admin
|
|
python -c "from app.db import Session; from app.models.user import User; from app.core.security import hash_password; db = Session(); admin = User(email='admin@example.com', username='admin', password_hash=hash_password('admin123')); db.add(admin); db.commit(); print('Admin créé!')"
|
|
|
|
# Démarrer le serveur
|
|
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
|
|
```
|
|
|
|
### Accès
|
|
|
|
- **Application**: http://localhost:8000
|
|
- **Admin par défaut**:
|
|
- Email: `admin@example.com`
|
|
- Password: `admin123`
|
|
|
|
---
|
|
|
|
## 📁 Structure du Projet
|
|
|
|
```
|
|
audiOhm/
|
|
├── backend/ # API FastAPI
|
|
│ ├── app/
|
|
│ │ ├── api/ # Routes API
|
|
│ │ ├── core/ # Configuration, sécurité
|
|
│ │ ├── models/ # Modèles de base de données
|
|
│ │ ├── schemas/ # Schémas Pydantic
|
|
│ │ ├── services/ # Logique métier
|
|
│ │ └── static/ # Frontend (HTML, CSS, JS)
|
|
│ ├── alembic/ # Migrations DB
|
|
│ ├── logs/ # Logs applicatifs
|
|
│ └── storage/ # Stockage local
|
|
├── design-system-v2/ # Documentation design system
|
|
├── docs/ # Documentation technique
|
|
├── docker/ # Configuration Docker
|
|
└── builds/ # Builds web
|
|
```
|
|
|
|
---
|
|
|
|
## ✨ Fonctionnalités
|
|
|
|
### 🎧 Player Audio
|
|
- Lecture, pause, précédent, suivant
|
|
- Barre de progression cliquable
|
|
- Contrôle du volume avec mute
|
|
- Shuffle et repeat
|
|
- Affichage des métadonnées (titre, artist, pochette)
|
|
|
|
### 📚 Bibliothèque
|
|
- **Playlists**: Création, modification, suppression
|
|
- **Titres likés**: Gestion des favoris
|
|
- **Historique**: Tracking des écoutes
|
|
- **Statistiques**: Compteurs d'écoute
|
|
|
|
### 🔍 Recherche
|
|
- Recherche YouTube intégrée
|
|
- Lecture instantanée depuis les résultats
|
|
- Ajout à la file d'attente
|
|
|
|
### 📋 Queue de Lecture
|
|
- File d'attente dynamique
|
|
- Shuffle
|
|
- Réorganisation
|
|
- Persistance locale
|
|
|
|
### 👤 Comptes
|
|
- Authentification JWT
|
|
- Gestion utilisateur
|
|
- Données persistantes
|
|
|
|
---
|
|
|
|
## 🔧 Configuration
|
|
|
|
### Variables d'Environnement
|
|
|
|
```bash
|
|
# .env
|
|
DATABASE_URL=postgresql://user:password@localhost/audiOhm
|
|
SECRET_KEY=votre_clé_secrète_ici
|
|
ALGORITHM=HS256
|
|
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
|
```
|
|
|
|
### Base de Données
|
|
|
|
```bash
|
|
# Lancer les migrations
|
|
alembic upgrade head
|
|
|
|
# Créer une nouvelle migration
|
|
alembic revision --autogenerate -m "description"
|
|
|
|
# Downgrade
|
|
alembic downgrade -1
|
|
```
|
|
|
|
---
|
|
|
|
## 📚 API Endpoints
|
|
|
|
### Authentification
|
|
- `POST /api/v1/auth/register` - Inscription
|
|
- `POST /api/v1/auth/login` - Connexion
|
|
- `GET /api/v1/auth/me` - Profil utilisateur
|
|
|
|
### Bibliothèque
|
|
- `GET /api/v1/library/liked-tracks` - Titres likés
|
|
- `POST /api/v1/library/liked-tracks/{track_id}` - Lik/unlike
|
|
- `GET /api/v1/library/history` - Historique d'écoute
|
|
- `POST /api/v1/library/history` - Ajouter à l'historique
|
|
- `GET /api/v1/library/stats` - Statistiques
|
|
|
|
### Playlists
|
|
- `GET /api/v1/playlists` - Lister les playlists
|
|
- `POST /api/v1/playlists` - Créer une playlist
|
|
- `GET /api/v1/playlists/{id}` - Détails playlist
|
|
- `PUT /api/v1/playlists/{id}` - Modifier playlist
|
|
- `DELETE /api/v1/playlists/{id}` - Supprimer playlist
|
|
- `POST /api/v1/playlists/{id}/tracks` - Ajouter des tracks
|
|
|
|
### Musique
|
|
- `GET /api/v1/music/trending` - Titres populaires
|
|
- `GET /api/v1/music/search` - Rechercher
|
|
- `GET /api/v1/music/youtube/{id}/stream` - Stream YouTube
|
|
|
|
---
|
|
|
|
## 🛠️ Développement
|
|
|
|
### Lancer en Mode Développement
|
|
|
|
```bash
|
|
# Backend avec rechargement automatique
|
|
cd backend
|
|
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
|
|
|
|
# Voir les logs
|
|
tail -f logs/app.log
|
|
```
|
|
|
|
### Tests
|
|
|
|
```bash
|
|
# Tests unitaires
|
|
pytest
|
|
|
|
# Tests avec couverture
|
|
pytest --cov=app tests/
|
|
|
|
# Tests API
|
|
pytest tests/api/
|
|
```
|
|
|
|
### Logs
|
|
|
|
Les logs sont sauvegardés dans `backend/logs/`:
|
|
- `app.log` - Logs applicatifs
|
|
- `error.log` - Erreurs uniquement
|
|
|
|
---
|
|
|
|
## 🐛 Dépannage
|
|
|
|
### Problème: La musique ne joue pas
|
|
|
|
**Vérifier:**
|
|
1. Que le serveur backend tourne
|
|
2. Que vous avez un token JWT valide (connecté)
|
|
3. Les logs du navigateur (F12 → Console)
|
|
4. Les logs backend
|
|
|
|
### Problème: Erreur 500 sur l'historique
|
|
|
|
**Solution:** Les endpoints de bibliothèque utilisent maintenant une construction manuelle des réponses au lieu de `model_validate()`. Vérifiez que vous utilisez la dernière version du code.
|
|
|
|
### Problème: Fonction JavaScript non définie
|
|
|
|
**Solution:** Toutes les fonctions appelées depuis le HTML sont maintenant assignées à `window`. Vérifiez que le fichier `app.js` a bien été mis à jour.
|
|
|
|
---
|
|
|
|
## 📝 Changelog
|
|
|
|
### Version 1.0.0 (2026-01-19)
|
|
- ✅ Application web complète
|
|
- ✅ Player audio avec contrôles complets
|
|
- ✅ Bibliothèque (playlists, liked, history)
|
|
- ✅ Recherche YouTube
|
|
- ✅ Queue de lecture
|
|
- ✅ Authentification JWT
|
|
- ✅ API REST complète
|
|
|
|
### Corrections Récentes
|
|
- Correction des erreurs 500 sur les endpoints de bibliothèque
|
|
- Correction des fonctions JavaScript non définies
|
|
- Amélioration de la gestion des erreurs 401
|
|
|
|
---
|
|
|
|
## 🤝 Contribution
|
|
|
|
Les contributions sont les bienvenues!
|
|
|
|
1. Fork le projet
|
|
2. Créer une branche (`git checkout -b feature/AmazingFeature`)
|
|
3. Commit (`git commit -m 'Add AmazingFeature'`)
|
|
4. Push (`git push origin feature/AmazingFeature`)
|
|
5. Ouvrir une Pull Request
|
|
|
|
---
|
|
|
|
## 📄 Licence
|
|
|
|
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
|
|
|
|
---
|
|
|
|
## 👥 Auteurs
|
|
|
|
- **Votre Nom** - *Initial work* - [Votre GitHub]
|
|
|
|
---
|
|
|
|
## 🙏 Remerciements
|
|
|
|
- FastAPI pour le framework backend excellent
|
|
- YouTube pour l'API de streaming
|
|
- La communauté open source
|
|
|
|
---
|
|
|
|
**Note:** Ce projet est une alternative éducative à Spotify. N'utilisez pas pour violer les droits d'auteur.
|