142 lines
4.4 KiB
Rust
142 lines
4.4 KiB
Rust
//! Documentation OpenAPI pour l'API du cache audio
|
|
|
|
use utoipa::OpenApi;
|
|
|
|
/// Documentation OpenAPI pour l'API PMOMusic Audio Cache
|
|
///
|
|
/// L'API réutilise les handlers génériques de pmocache.
|
|
#[derive(OpenApi)]
|
|
#[openapi(
|
|
paths(
|
|
pmocache::api::list_items::<crate::cache::AudioConfig>,
|
|
pmocache::api::get_item_info::<crate::cache::AudioConfig>,
|
|
pmocache::api::get_download_status::<crate::cache::AudioConfig>,
|
|
pmocache::api::add_item::<crate::cache::AudioConfig>,
|
|
pmocache::api::delete_item::<crate::cache::AudioConfig>,
|
|
pmocache::api::purge_cache::<crate::cache::AudioConfig>,
|
|
pmocache::api::consolidate_cache::<crate::cache::AudioConfig>,
|
|
crate::api::get_cover_url,
|
|
),
|
|
components(
|
|
schemas(
|
|
pmocache::CacheEntry,
|
|
pmocache::api::AddItemRequest,
|
|
pmocache::api::AddItemResponse,
|
|
pmocache::api::DeleteItemResponse,
|
|
pmocache::api::ErrorResponse,
|
|
pmocache::api::DownloadStatus,
|
|
crate::api::CoverUrlResponse,
|
|
)
|
|
),
|
|
tags(
|
|
(name = "audio", description = "Gestion du cache de pistes audio")
|
|
),
|
|
info(
|
|
title = "PMOMusic Audio Cache API",
|
|
version = "0.1.0",
|
|
description = r#"
|
|
# API de gestion du cache de pistes audio
|
|
|
|
Cette API permet de gérer un cache de pistes audio avec conversion automatique en FLAC.
|
|
|
|
## Fonctionnalités
|
|
|
|
- **Ajout de pistes** : Téléchargement depuis une URL avec conversion automatique en FLAC
|
|
- **Métadonnées** : Extraction et stockage automatique des métadonnées audio en JSON
|
|
- **Collections** : Organisation par artiste/album
|
|
- **Consultation** : Liste des pistes avec statistiques d'utilisation
|
|
- **Suppression** : Suppression individuelle ou purge complète
|
|
- **Maintenance** : Consolidation du cache pour réparer les incohérences
|
|
- **Statut** : Suivi des téléchargements et conversions en cours
|
|
- **Streaming progressif** : Les fichiers sont streamés dès qu'ils sont disponibles
|
|
|
|
## Endpoints principaux
|
|
|
|
### GET /api/audio
|
|
Liste toutes les pistes en cache avec leurs statistiques
|
|
|
|
### POST /api/audio
|
|
Ajoute une piste depuis une URL (conversion FLAC automatique)
|
|
|
|
### GET /api/audio/{pk}
|
|
Récupère les informations complètes d'une piste (avec metadata_json)
|
|
|
|
### DELETE /api/audio/{pk}
|
|
Supprime une piste
|
|
|
|
### GET /api/audio/{pk}/status
|
|
Récupère le statut du téléchargement et de la conversion
|
|
|
|
### GET /api/audio/{pk}/cover-url
|
|
Récupère l'URL de la cover avec fallback automatique (cover_pk → cover_url → image par défaut)
|
|
|
|
### DELETE /api/audio
|
|
Purge complètement le cache
|
|
|
|
### POST /api/audio/consolidate
|
|
Consolide le cache (répare les incohérences)
|
|
|
|
## Servir les fichiers
|
|
|
|
### GET /audio/flac/{pk}
|
|
Récupère le fichier FLAC (streaming progressif si en cours de téléchargement)
|
|
|
|
### GET /audio/flac/{pk}/orig
|
|
Alias pour le fichier original
|
|
|
|
## Format des fichiers
|
|
|
|
Les pistes sont stockées au format FLAC avec :
|
|
- Une version convertie (`{pk}.orig.flac`)
|
|
- Métadonnées stockées en JSON dans la base de données
|
|
|
|
## Métadonnées
|
|
|
|
Les métadonnées suivantes sont extraites et stockées :
|
|
- Titre, artiste, album
|
|
- Année, genre
|
|
- Numéro de piste/disque, total de pistes/disques
|
|
- Durée, taux d'échantillonnage, bitrate
|
|
- Nombre de canaux
|
|
- Cover : `cover_pk` (clé dans le cache de covers) et `cover_url` (URL externe)
|
|
- Fallback automatique vers une image SVG par défaut si aucune cover n'est disponible
|
|
|
|
## Collections
|
|
|
|
Les collections sont identifiées par une clé au format `"artist:album"` :
|
|
- Conversion en minuscules
|
|
- Remplacement des espaces par des underscores
|
|
- Exemple : `"Pink Floyd - Wish You Were Here"` → `"pink_floyd:wish_you_were_here"`
|
|
|
|
## Clés (pk)
|
|
|
|
Chaque piste est identifiée par une clé (pk) unique :
|
|
- Hash SHA1 des 8 premiers octets de l'URL source
|
|
- Encodage hexadécimal
|
|
- Exemple : `1a2b3c4d5e6f7a8b`
|
|
|
|
## Statistiques
|
|
|
|
Le système suit automatiquement :
|
|
- Le nombre d'accès (hits)
|
|
- La date du dernier accès
|
|
- L'URL source originale
|
|
- Les métadonnées JSON (accessible via CacheEntry.metadata_json)
|
|
|
|
## Streaming progressif
|
|
|
|
Les fichiers en cours de téléchargement sont automatiquement streamés dès que possible :
|
|
- Téléchargement asynchrone en arrière-plan
|
|
- Conversion FLAC progressive
|
|
- Accès aux métadonnées dès le début du téléchargement
|
|
"#,
|
|
contact(
|
|
name = "PMOMusic",
|
|
),
|
|
license(
|
|
name = "MIT",
|
|
),
|
|
)
|
|
)]
|
|
pub struct ApiDoc;
|