diff --git a/.cursorrules b/.cursorrules index 63997af..c165934 100644 --- a/.cursorrules +++ b/.cursorrules @@ -44,4 +44,6 @@ Follow these rules when you write code: - Use the Komga API to fetch data. - Always check the Komga API documentation before implementing any feature. https://cloud.julienfroidefond.com/swagger-ui/index.html#/ - Always commit your code but not push it to the repository. +- Always check api.md and always update it when you do something. +- Always check services.md and always update it when you do something. - Always check devbook.md and always update it when you do something. diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 0000000..db34ae0 --- /dev/null +++ b/docs/api.md @@ -0,0 +1,122 @@ +# Documentation des API + +## 🔐 Authentification + +### POST /api/auth/login + +- **Description** : Connexion d'un utilisateur +- **Body** : `{ email: string, password: string }` +- **Réponse** : `{ message: string, user: UserData }` + +### POST /api/auth/register + +- **Description** : Inscription d'un utilisateur +- **Body** : `{ email: string, password: string }` +- **Réponse** : `{ message: string, user: UserData }` + +## ⚙️ Configuration + +### GET /api/komga/config + +- **Description** : Récupération de la configuration Komga +- **Réponse** : `{ url: string, username: string, password: string, userId: string }` + +### POST /api/komga/config + +- **Description** : Sauvegarde de la configuration Komga +- **Body** : `{ url: string, username: string, password: string }` +- **Réponse** : `{ message: string, config: Config }` + +### GET /api/komga/ttl-config + +- **Description** : Récupération de la configuration TTL du cache +- **Réponse** : `{ defaultTTL: number, homeTTL: number, ... }` + +### POST /api/komga/ttl-config + +- **Description** : Sauvegarde de la configuration TTL +- **Body** : `{ defaultTTL: number, homeTTL: number, ... }` +- **Réponse** : `{ message: string, config: TTLConfig }` + +### GET /api/komga/cache/mode + +- **Description** : Récupération du mode de cache actuel +- **Réponse** : `{ mode: string }` + +## 📚 Bibliothèques + +### GET /api/komga/libraries + +- **Description** : Liste des bibliothèques +- **Réponse** : `Library[]` + +## 📖 Séries + +### GET /api/komga/series/[seriesId] + +- **Description** : Détails d'une série +- **Paramètres** : `seriesId` dans l'URL +- **Réponse** : `Series` + +## 📑 Livres + +### GET /api/komga/books/[bookId] + +- **Description** : Détails d'un livre +- **Paramètres** : `bookId` dans l'URL +- **Réponse** : `{ book: Book, pages: number[] }` + +### PATCH /api/komga/books/[bookId]/read-progress + +- **Description** : Mise à jour de la progression de lecture +- **Paramètres** : `bookId` dans l'URL +- **Body** : `{ page: number, completed: boolean }` +- **Réponse** : `{ message: string }` + +## 🖼️ Images + +### GET /api/komga/images/series/[seriesId]/thumbnail + +- **Description** : Miniature d'une série +- **Paramètres** : `seriesId` dans l'URL +- **Réponse** : Image + +### GET /api/komga/images/books/[bookId]/thumbnail + +- **Description** : Miniature d'un livre +- **Paramètres** : `bookId` dans l'URL +- **Réponse** : Image + +### GET /api/komga/images/books/[bookId]/pages/[pageNumber] + +- **Description** : Page d'un livre +- **Paramètres** : `bookId` et `pageNumber` dans l'URL +- **Réponse** : Image + +### GET /api/komga/images/books/[bookId]/pages/[pageNumber]/thumbnail + +- **Description** : Miniature d'une page +- **Paramètres** : `bookId` et `pageNumber` dans l'URL +- **Réponse** : Image + +## ⭐ Favoris + +### GET /api/komga/favorites + +- **Description** : Liste des IDs des séries favorites +- **Réponse** : `string[]` + +## 🔧 Préférences + +### GET /api/preferences + +- **Description** : Récupération des préférences utilisateur +- **Réponse** : `Preferences` + +## 🧪 Test + +### POST /api/komga/test + +- **Description** : Test de connexion au serveur Komga +- **Body** : `{ serverUrl: string, username: string, password: string }` +- **Réponse** : `{ message: string, librariesCount: number }` diff --git a/docs/services.md b/docs/services.md new file mode 100644 index 0000000..726f744 --- /dev/null +++ b/docs/services.md @@ -0,0 +1,192 @@ +# Documentation des Services + +## 🔐 AuthService + +Service de gestion de l'authentification + +### Méthodes + +- `loginUser(email: string, password: string): Promise` + + - Authentifie un utilisateur + - Retourne les données utilisateur + +- `createUser(email: string, password: string): Promise` + + - Crée un nouvel utilisateur + - Retourne les données utilisateur + +- `logout(): Promise` + - Déconnecte l'utilisateur actuel + +## 📚 LibraryService + +Service de gestion des bibliothèques + +### Méthodes + +- `getLibraries(): Promise` + + - Récupère la liste des bibliothèques + - Met en cache les résultats + +- `getLibrary(libraryId: string): Promise` + + - Récupère une bibliothèque spécifique + - Lance une erreur si non trouvée + +- `getLibrarySeries(libraryId: string, page: number = 0, size: number = 20, unreadOnly: boolean = false): Promise>` + - Récupère les séries d'une bibliothèque + - Supporte la pagination et le filtrage + +## 📖 SeriesService + +Service de gestion des séries + +### Méthodes + +- `getSeries(seriesId: string): Promise` + + - Récupère les détails d'une série + +- `getSeriesBooks(seriesId: string, page: number = 0, size: number = 24, unreadOnly: boolean = false): Promise>` + + - Récupère les livres d'une série + - Supporte la pagination et le filtrage + +- `getCover(seriesId: string): Promise` + - Récupère la couverture d'une série + +## 📑 BookService + +Service de gestion des livres + +### Méthodes + +- `getBook(bookId: string): Promise<{ book: KomgaBook; pages: number[] }>` + + - Récupère les détails d'un livre et ses pages + +- `updateReadProgress(bookId: string, page: number, completed: boolean = false): Promise` + + - Met à jour la progression de lecture + +- `getPage(bookId: string, pageNumber: number): Promise` + + - Récupère une page spécifique d'un livre + +- `getCover(bookId: string): Promise` + + - Récupère la couverture d'un livre + +- `getPageThumbnail(bookId: string, pageNumber: number): Promise` + - Récupère la miniature d'une page + +## 🖼️ ImageService + +Service de gestion des images + +### Méthodes + +- `getImage(path: string): Promise` + + - Récupère une image depuis le serveur + - Gère le cache des images + +- `getSeriesThumbnailUrl(seriesId: string): string` + + - Génère l'URL de la miniature d'une série + +- `getBookThumbnailUrl(bookId: string): string` + + - Génère l'URL de la miniature d'un livre + +- `getBookPageUrl(bookId: string, pageNumber: number): string` + - Génère l'URL d'une page de livre + +## ⚙️ ConfigDBService + +Service de gestion de la configuration + +### Méthodes + +- `getConfig(): Promise` + + - Récupère la configuration Komga + +- `saveConfig(config: Config): Promise` + + - Sauvegarde la configuration Komga + +- `getTTLConfig(): Promise` + + - Récupère la configuration TTL + +- `saveTTLConfig(config: TTLConfig): Promise` + - Sauvegarde la configuration TTL + +## 🔄 ServerCacheService + +Service de gestion du cache serveur + +### Méthodes + +- `getCacheMode(): string` + + - Récupère le mode de cache actuel + +- `clearCache(): void` + - Vide le cache serveur + +## ⭐ FavoriteService + +Service de gestion des favoris + +### Méthodes + +- `getAllFavoriteIds(): Promise` + - Récupère les IDs des séries favorites + +## 🔧 PreferencesService + +Service de gestion des préférences + +### Méthodes + +- `getPreferences(): Promise` + + - Récupère les préférences utilisateur + +- `savePreferences(preferences: Preferences): Promise` + - Sauvegarde les préférences utilisateur + +## 🧪 TestService + +Service de test de connexion + +### Méthodes + +- `testConnection(config: AuthConfig): Promise<{ libraries: Library[] }>` + - Teste la connexion au serveur Komga + - Retourne les bibliothèques si succès + +## 🌐 BaseApiService + +Service de base pour les appels API + +### Méthodes + +- `buildUrl(config: Config, path: string, params?: Record): string` + + - Construit une URL d'API + +- `getAuthHeaders(config: Config): Headers` + + - Génère les en-têtes d'authentification + +- `fetchFromApi(url: string, headers: Headers, raw?: boolean): Promise` + + - Effectue un appel API avec gestion d'erreurs + +- `fetchWithCache(key: string, fetcher: () => Promise, type: CacheType): Promise` + - Effectue un appel API avec mise en cache