169 lines
3.8 KiB
Markdown
169 lines
3.8 KiB
Markdown
# Migration vers SQLite - Guide d'utilisation
|
|
|
|
## 📦 Installation
|
|
|
|
```bash
|
|
pnpm add better-sqlite3
|
|
pnpm add -D @types/better-sqlite3
|
|
```
|
|
|
|
## 🚀 Migration des données
|
|
|
|
### 1. Exécuter la migration
|
|
|
|
```bash
|
|
pnpm tsx server/database/migrate.ts
|
|
```
|
|
|
|
Cette commande va :
|
|
|
|
- Créer la base de données SQLite dans `server/database/evilspins.db`
|
|
- Créer les tables (boxes, sides, artists, tracks)
|
|
- Importer toutes vos données existantes
|
|
|
|
### 2. Vérifier la migration
|
|
|
|
Lancez votre serveur Nuxt :
|
|
|
|
```bash
|
|
pnpm dev
|
|
```
|
|
|
|
Testez les nouveaux endpoints :
|
|
|
|
```bash
|
|
# Récupérer toutes les boxes
|
|
curl http://localhost:3000/api/boxes
|
|
|
|
# Récupérer tous les artistes
|
|
curl http://localhost:3000/api/artists
|
|
|
|
# Récupérer les tracks de compilation (première page)
|
|
curl http://localhost:3000/api/tracks/compilation
|
|
|
|
# Filtrer par boxId
|
|
curl http://localhost:3000/api/tracks/compilation?boxId=ES00
|
|
|
|
# Pagination
|
|
curl http://localhost:3000/api/tracks/compilation?page=2&limit=10
|
|
```
|
|
|
|
## 📁 Structure créée
|
|
|
|
```
|
|
server/
|
|
├── database/
|
|
│ ├── evilspins.db # Base SQLite (créée automatiquement)
|
|
│ ├── schema.sql # Schéma de la base
|
|
│ └── migrate.ts # Script de migration
|
|
├── utils/
|
|
│ └── database.ts # Utilitaire de connexion
|
|
└── api/
|
|
├── boxes.ts # ✅ Nouveau (SQLite)
|
|
├── artists.ts # ✅ Nouveau (SQLite)
|
|
└── tracks/
|
|
├── compilation.ts # ✅ Nouveau (SQLite avec pagination)
|
|
└── playlist.ts # ⚠️ À adapter
|
|
```
|
|
|
|
## 🔄 Côté client : utiliser la pagination
|
|
|
|
Exemple pour charger les tracks progressivement :
|
|
|
|
```typescript
|
|
// Au lieu de charger tout d'un coup
|
|
const { data } = await useFetch('/api/tracks/compilation')
|
|
|
|
// Maintenant avec pagination
|
|
const { data } = await useFetch('/api/tracks/compilation', {
|
|
query: {
|
|
page: 1,
|
|
limit: 50,
|
|
boxId: 'ES00',
|
|
side: 'A'
|
|
}
|
|
})
|
|
|
|
// data.tracks -> tableau de tracks
|
|
// data.pagination -> { page, limit, total, totalPages }
|
|
```
|
|
|
|
## 📊 Avantages obtenus
|
|
|
|
✅ **Performances** : Plus de chargement massif, pagination efficace
|
|
✅ **Scalabilité** : Peut gérer des milliers de tracks sans ralentir
|
|
✅ **Filtrage** : Recherche et filtres côté serveur (ultra rapide)
|
|
✅ **Déploiement** : Un seul fichier `.db` à déployer
|
|
|
|
## 🔧 À faire ensuite
|
|
|
|
### 1. Adapter l'endpoint playlist
|
|
|
|
L'endpoint `tracks/playlist.ts` lit des fichiers sur disque. Options :
|
|
|
|
**Option A** : Scanner le dossier au démarrage et insérer dans SQLite
|
|
**Option B** : Garder la lecture filesystem mais optimiser avec un cache
|
|
|
|
### 2. Modifier le frontend
|
|
|
|
Mettre à jour vos composants Vue pour utiliser la pagination :
|
|
|
|
```vue
|
|
<script setup>
|
|
const page = ref(1)
|
|
const { data, refresh } = await useFetch('/api/tracks/compilation', {
|
|
query: { page, limit: 20 }
|
|
})
|
|
|
|
function loadMore() {
|
|
page.value++
|
|
refresh()
|
|
}
|
|
</script>
|
|
```
|
|
|
|
### 3. Ajouter des fonctionnalités
|
|
|
|
Exemples de requêtes possibles maintenant :
|
|
|
|
```typescript
|
|
// Recherche par titre
|
|
GET /api/tracks/compilation?search=love
|
|
|
|
// Tracks d'un artiste
|
|
GET /api/tracks/compilation?artistId=5
|
|
|
|
// Tri personnalisé
|
|
GET /api/tracks/compilation?sortBy=title&order=asc
|
|
```
|
|
|
|
## 🐛 Dépannage
|
|
|
|
### Erreur "Cannot find module 'better-sqlite3'"
|
|
|
|
```bash
|
|
pnpm add better-sqlite3
|
|
```
|
|
|
|
### La base ne se crée pas
|
|
|
|
Vérifiez les permissions :
|
|
|
|
```bash
|
|
chmod -R 755 server/database
|
|
```
|
|
|
|
### Données manquantes après migration
|
|
|
|
Re-exécutez la migration :
|
|
|
|
```bash
|
|
pnpm tsx scripts/migrate.ts
|
|
```
|
|
|
|
## 📝 Notes
|
|
|
|
- La base SQLite est créée automatiquement au premier lancement
|
|
- Elle est incluse dans `.gitignore` par défaut (à ajuster selon vos besoins)
|
|
- Pour un déploiement, commitez le fichier `.db` OU re-exécutez la migration en production
|