diff --git a/_docs/divers/API_ENDPOINTS_CHECKLIST.md b/_docs/divers/API_ENDPOINTS_CHECKLIST.md new file mode 100644 index 0000000..cf79106 --- /dev/null +++ b/_docs/divers/API_ENDPOINTS_CHECKLIST.md @@ -0,0 +1,79 @@ +# Suivi des endpoints MangaCollec + +État du suivi au 15 septembre 2026 : **23 endpoints implémentés sur 35**. + +Une case cochée signifie qu’un wrapper d’appel est présent dans +`../libs/mangacollec`. La présence d’un DTO, d’un modèle ou du transport HTTP seul +ne suffit pas à cocher un endpoint. Chaque implémentation doit ensuite être +couverte par les tests adaptés. + +La liste et les chemins exacts proviennent de la documentation officielle du +skill `mangacollec-doc`, en particulier `references/mangacollec/index.md`. + +## Catalogue — 11/11 + +- [x] `GET /v2/series` — `../libs/mangacollec` +- [x] `GET /v2/series/{id}` — `../libs/mangacollec` +- [x] `GET /v2/boxes/{id}` — `../libs/mangacollec` +- [x] `GET /v2/volumes/news` — `../libs/mangacollec` +- [x] `GET /v2/volumes/{id}` — `../libs/mangacollec` +- [x] `GET /v2/editions/{id}` — `../libs/mangacollec` +- [x] `GET /v2/publishers` — `../libs/mangacollec` +- [x] `GET /v2/publishers/{publisher_id}` — `../libs/mangacollec` +- [x] `GET /v2/authors` — `../libs/mangacollec` +- [x] `GET /v2/authors/{author_id}` — `../libs/mangacollec` +- [x] `GET /v2/kinds` — `../libs/mangacollec` + +## Planning — 0/2 + +- [ ] `GET /v2/planning` +- [ ] `GET /v2/users/me/ad_native_planning_perso` + +## Suivis — 2/2 + +- [x] `POST /v1/follow_editions` — `../libs/mangacollec` +- [x] `DELETE /v1/follow_editions/{follow_edition_id}` — `../libs/mangacollec` + +## Collection — 4/6 + +- [ ] `GET /v2/users/me/collection` +- [ ] `GET /v2/user/{username}/collection` +- [x] `POST /v1/possessions_multiple` — `../libs/mangacollec` +- [x] `DELETE /v1/possessions_multiple` — `../libs/mangacollec` +- [x] `POST /v1/box_possessions_multiple` — `../libs/mangacollec` +- [x] `DELETE /v1/box_possessions_multiple` — `../libs/mangacollec` + +## Lectures — 2/2 + +- [x] `POST /v1/reads_multiple` — `../libs/mangacollec` +- [x] `DELETE /v1/reads_multiple` — `../libs/mangacollec` + +## Prêts — 4/4 + +- [x] `POST /v1/loans_multiple` — `../libs/mangacollec` +- [x] `DELETE /v1/loans_multiple` — `../libs/mangacollec` +- [x] `POST /v2/borrowers` — `../libs/mangacollec` +- [x] `DELETE /v2/borrowers/{borrower_id}` — `../libs/mangacollec` + +## Panier — 0/6 + +- [ ] `GET /v1/users/me/cart` +- [ ] `POST /v1/users/me/cart` +- [ ] `DELETE /v1/users/me/cart/{id_cart_item}` +- [ ] `GET /v1/bdfugue_offer/{isbn}` +- [ ] `GET /v1/amazon_offer/{asin}` +- [ ] `GET /v1/img_offer/{isbn}` + +## Recommandations — 0/1 + +- [ ] `GET /v1/users/me/recommendation` + +## Utilisateur — 0/1 + +- [ ] `GET /v1/users/me` + +## Règle de mise à jour + +Après l’ajout d’un wrapper d’endpoint dans `../libs/mangacollec`, mettre à jour la +case correspondante et le compteur de la section. Ne cocher l’endpoint qu’après +validation de sa requête, de son DTO de réponse et de ses tests pertinents. diff --git a/_docs/divers/correspondance_pages_qml.md b/_docs/divers/correspondance_pages_qml.md new file mode 100644 index 0000000..bf4248f --- /dev/null +++ b/_docs/divers/correspondance_pages_qml.md @@ -0,0 +1,33 @@ +# Correspondance entre MangaCollec et les pages QML + +Ce document distingue les composants QML actuellement présents des pages web qui restent à développer. L’existence d’un fichier QML ne prouve pas que son rendu correspond au site. + +La référence web est [MangaCollec](https://www.mangacollec.com). Toute vérification visuelle se fait à **1280 × 720**, avec un zoom navigateur et un affichage QML à 100 %, selon la [règle de correspondance des pages QML](../.agents/rules/qml-page-correspondence.md). + +## Composants QML présents + +Les lignes ci-dessous désignent un composant qui existe dans le dépôt. Sa conformité visuelle reste non vérifiée tant qu’une comparaison explicite n’a pas été faite. + +| Parcours web cible | Composants QML présents | État | +| --- | --- | --- | +| Nouveautés — `/` | [NewsPage.qml](../desktop/booksync_desktop/qml/pages/NewsPage.qml) | Présent ; comparaison visuelle non vérifiée | +| Collection — `/user/:username/reading`, `/user/:username/collection`, `/user/:username/missing`, `/user/shooter_lab/wish`, `/loan` | [CollectionPage.qml](../desktop/booksync_desktop/qml/pages/CollectionPage.qml), [ReadingTabPage.qml](../desktop/booksync_desktop/qml/pages/collection/ReadingTabPage.qml), [CollectionTabPage.qml](../desktop/booksync_desktop/qml/pages/collection/CollectionTabPage.qml), [CompleteTabPage.qml](../desktop/booksync_desktop/qml/pages/collection/CompleteTabPage.qml), [WishTabPage.qml](../desktop/booksync_desktop/qml/pages/collection/WishTabPage.qml), [LoansTabPage.qml](../desktop/booksync_desktop/qml/pages/collection/LoansTabPage.qml) | Présents ; comparaison visuelle non vérifiée | +| Planning — `/user/:username/planning`, `/planning`, `/planning/news`, `/planning/boxes` | [PlanningPage.qml](../desktop/booksync_desktop/qml/pages/PlanningPage.qml), [CustomTabPage.qml](../desktop/booksync_desktop/qml/pages/planning/CustomTabPage.qml), [AllTabPage.qml](../desktop/booksync_desktop/qml/pages/planning/AllTabPage.qml), [NewsTabPage.qml](../desktop/booksync_desktop/qml/pages/planning/NewsTabPage.qml), [BoxTabPage.qml](../desktop/booksync_desktop/qml/pages/planning/BoxTabPage.qml) | Présents ; comparaison visuelle non vérifiée | +| Recherche — `/series`, `/authors`, `/publishers` | [SearchPage.qml](../desktop/booksync_desktop/qml/pages/SearchPage.qml) | Les trois catégories sont des onglets de cette page ; comparaison visuelle non vérifiée | +| Panier — `/cart` | [CartPage.qml](../desktop/booksync_desktop/qml/pages/CartPage.qml) | Présent ; comparaison visuelle non vérifiée | +| Fiche volume — `/volumes/:volumeId` | [VolumePage.qml](../desktop/booksync_desktop/qml/pages/catalogue/VolumePage.qml) | Présent ; comparaison visuelle non vérifiée | +| Statistiques — `/user/:username/collection/statistics` | [StatPage.qml](../desktop/booksync_desktop/qml/pages/StatPage.qml) | Présent ; comparaison visuelle non vérifiée | + +## Parcours web sans page QML dédiée + +Ces cibles n’ont pas actuellement de fichier QML correspondant dans le dépôt. + +| Parcours cible | État actuel | +| --- | --- | +| Fiches série, auteur, éditeur, édition et coffret — `/series/:seriesId`, `/authors/:authorId`, `/publishers/:publisherId`, `/editions/:editionId`, `/boxes/:boxId` | À développer | +| Statistiques par éditeur et par genre — `/user/:username/collection/statistics/publishers`, `/user/:username/collection/statistics/kinds` | À développer | +| Historique des ajouts et historique des lectures — `/user/:username/collection/history`, `/user/:username/reading/history` | À développer | +| Création de prêt, gestion des emprunteurs et choix des volumes d’un prêt — `/loan/create`, `/borrowers`, `/loan/create/collection`, `/loan/create/collection/:editionId` | À développer | +| Fiche d’édition dans la collection et dans la pile à lire — `/collection/edition/:editionId`, `/reading/edition/:editionId` | À développer | + +L’application contient aussi des pages propres à Booksync, notamment l’accueil, le compte et la prédiction ; elles n’ont pas de parcours web correspondant dans ce tableau. diff --git a/_docs/divers/store_architecture.json b/_docs/divers/store_architecture.json new file mode 100755 index 0000000..51a31a6 --- /dev/null +++ b/_docs/divers/store_architecture.json @@ -0,0 +1,323 @@ +{ + "volumes": { + "000a74ac-1007-4522-be5a-b990998c5864": { + "id": "000a74ac-1007-4522-be5a-b990998c5864", + "title": null, + "number": 2, + "content": null, + "release_date": "2015-06-11", + "image_url": "https://images-eu.ssl-images-amazon.com/images/I/515rcG6ue8L.jpg", + "isbn": "9782369740650", + "asin": "2369740655", + "nb_pages": null, + "edition_id": "406557f4-1531-40a2-8178-5dcf1de4c1c3", + "not_sold": false, + "possessions_count": 1723 + } + }, + "editions": { + "00069cdc-103e-4330-8ccd-7b47fe48e56a": { + "id": "00069cdc-103e-4330-8ccd-7b47fe48e56a", + "title": null, + "series_id": "a6d37a94-63f6-4b91-91ec-547ac2e8182a", + "publisher_id": "69878791-96a6-41c3-9d63-cddd5c12e2dd", + "parent_edition_id": null, + "volumes_count": 1, + "last_volume_number": 0, + "commercial_stop": false, + "not_finished": false, + "follow_editions_count": 80 + } + }, + "series": { + "00012193-669e-4be0-a6e9-339bc45e6e6a": { + "id": "00012193-669e-4be0-a6e9-339bc45e6e6a", + "title": "Stigma", + "type_id": "106f524e-7283-44b8-aa84-25e9a7fb1f7d", + "adult_content": false, + "editions_count": 1, + "tasks_count": 1, + "kinds_ids": null + } + }, + "tasks": { + "11a82d75-adf1-42fd-879f-d1a462a70cf6": { + "id": "11a82d75-adf1-42fd-879f-d1a462a70cf6", + "author_id": "d3b64eda-8e58-47e6-80c2-85ca810e377f", + "job_id": "dc7b6062-6aae-49ee-87a2-95d47ab52600", + "series_id": "73400dbf-9c6f-4293-99eb-69b732df5038" + } + }, + "authors": { + "0000cfc5-0676-4602-957a-4035405524cd": { + "id": "0000cfc5-0676-4602-957a-4035405524cd", + "name": "Senga", + "first_name": "Fumitaka", + "tasks_count": 1 + } + }, + "publishers": { + "009eedef-c3ec-4f14-b946-57cfed5dd138": { + "id": "009eedef-c3ec-4f14-b946-57cfed5dd138", + "title": "H&O", + "closed": false, + "editions_count": 6, + "no_amazon": false + } + }, + "types": { + "09253f84-8e89-4536-bfb2-bd91d9e0c0ab": { + "id": "09253f84-8e89-4536-bfb2-bd91d9e0c0ab", + "title": "Comics", + "to_display": false + } + }, + "jobs": { + "37fb2477-ec0d-4ffc-9d3b-4189c2d01629": { + "id": "37fb2477-ec0d-4ffc-9d3b-4189c2d01629", + "title": "Dessin" + } + }, + "kinds": { + "0063c975-8321-4827-9661-0bfff734ea55": { + "id": "0063c975-8321-4827-9661-0bfff734ea55", + "title": "Extra-terrestre", + "series_ids": [ + "0a9c3799-e9c2-4155-8c78-8edbaf3f6b02", + "acea105e-82d2-48cb-8730-a94fdba8f10e", + "b81323da-d87d-4f03-9bd2-d753a4baae4d" + ] + } + }, + "boxes": { + "1d02c966-e78c-40f3-a802-92ccd6b4b99d": { + "id": "1d02c966-e78c-40f3-a802-92ccd6b4b99d", + "title": "Edition Limitée Tome 9", + "number": 0, + "content": null, + "release_date": "2026-01-16", + "image_url": "https://m.media-amazon.com/images/I/41akizyn9LL.jpg", + "isbn": "9782386585883", + "asin": "2386585883", + "commercial_stop": false, + "box_edition_id": "33ebf952-2ac5-4b8e-952a-b11f5e8d4244", + "box_possessions_count": 54 + } + }, + "boxEditions": { + "090584e3-9033-4aaf-8d2f-49bc3c8ac9eb": { + "id": "090584e3-9033-4aaf-8d2f-49bc3c8ac9eb", + "title": "Sur la colline où poussent encore ces fleurs…", + "publisher_id": "c1866645-afb4-44dd-bdce-420606488352", + "boxes_count": 3, + "adult_content": false, + "box_follow_editions_count": 1191 + } + }, + "boxVolumes": { + "036ee100-ac1a-45cc-82aa-10b4449bb354": { + "id": "036ee100-ac1a-45cc-82aa-10b4449bb354", + "box_id": "75623392-6c9b-436d-b53c-db643cc985bc", + "volume_id": "bac47c3f-1e43-41ed-9949-a00321e7707d", + "included": true + } + }, + "followEditions": { + "011e347c-7ab7-46c9-b477-5ef6a947c1ee": { + "id": "011e347c-7ab7-46c9-b477-5ef6a947c1ee", + "edition_id": "a0f430fa-7eec-4db3-af0b-30d6e98a8b30", + "user_id": "1f32e2fc-c7c3-4dd3-9f18-e0fcdb075295", + "following": true + } + }, + "possessions": { + "000049ec-f4b0-4e95-829a-283b22749d3c": { + "id": "000049ec-f4b0-4e95-829a-283b22749d3c", + "volume_id": "9ed92b95-8042-4f99-ad24-b2321b4bf351", + "user_id": "1f32e2fc-c7c3-4dd3-9f18-e0fcdb075295", + "created_at": "2019-03-07T16:08:58.783Z" + } + }, + "boxFollowEditions": { + "28d905e6-16ec-40f1-b020-c27acc58b414": { + "id": "28d905e6-16ec-40f1-b020-c27acc58b414", + "box_edition_id": "9aa21cc8-9e64-4dcc-9c55-dd0c30a0aac2", + "user_id": "1f32e2fc-c7c3-4dd3-9f18-e0fcdb075295", + "following": true + } + }, + "boxPossessions": { + "0024c8a5-ef20-4851-aca2-419ba8e75c94": { + "id": "0024c8a5-ef20-4851-aca2-419ba8e75c94", + "box_id": "1e9aa5ea-e919-423e-82ae-10bc1bc3e4a8", + "user_id": "1f32e2fc-c7c3-4dd3-9f18-e0fcdb075295", + "created_at": "2023-06-06T17:33:50.140Z" + } + }, + "readEditions": { + "03250200-fd98-403b-ac72-5adb2c6eb2a8": { + "id": "03250200-fd98-403b-ac72-5adb2c6eb2a8", + "edition_id": "9065957a-f9f7-4c23-bdfe-c09da5c12a02", + "user_id": "1f32e2fc-c7c3-4dd3-9f18-e0fcdb075295", + "reading": true + } + }, + "reads": { + "006fec7a-5d8c-48ae-a0d0-c632a674dd5f": { + "id": "006fec7a-5d8c-48ae-a0d0-c632a674dd5f", + "volume_id": "5cfb1581-e895-4326-98cf-bcfa3c772d36", + "user_id": "1f32e2fc-c7c3-4dd3-9f18-e0fcdb075295", + "created_at": "2022-07-29T18:32:26.380Z" + } + }, + "borrowers": { + "1490efe9-7308-495c-935f-8988288d5316": { + "id": "1490efe9-7308-495c-935f-8988288d5316", + "title": "Stennvoorde", + "category": "storage", + "user_id": "1f32e2fc-c7c3-4dd3-9f18-e0fcdb075295", + "created_at": "2026-01-28T09:42:05.120Z" + } + }, + "loans": { + "1f912c85-3737-43e9-bdbd-4326fc51c461": { + "id": "1f912c85-3737-43e9-bdbd-4326fc51c461", + "possession_id": "c63c0893-b65a-4ef4-98b0-3de583ae8a71", + "borrower_id": "28df6242-6537-4b0e-ba96-2528ab5eebd6", + "created_at": "2026-01-28T09:42:27.514Z" + } + }, + "user": { + "id": "1f32e2fc-c7c3-4dd3-9f18-e0fcdb075295", + "email": "platevoet.vincent@icloud.com", + "confirmed_at": "2025-10-26T21:13:21.599Z", + "confirmation_sent_at": "2025-10-26T21:13:01.852Z", + "unconfirmed_email": null, + "created_at": "2019-03-07T15:34:25.044Z", + "username": "shooterdev", + "notification_email": true, + "setting_collection_order": "title", + "certify_adult": true, + "possessions_count": 1812, + "ad_home_banner": true, + "ad_native_home_first": true, + "ad_native_planning_perso": true, + "is_premium": true, + "subscriptions": [ + { + "id": "7f74f97e-acc5-4d6d-86fc-aace42eed507", + "user_id": "1f32e2fc-c7c3-4dd3-9f18-e0fcdb075295", + "app": "android", + "product_id": "com.mangacollec.premium.yearly", + "original_purchase_date": "2022-05-25T17:10:44.000Z", + "expires_date": "2023-07-08T17:09:49.000Z", + "auto_renewing": false, + "created_at": "2022-05-25T17:11:06.509Z", + "updated_at": "2023-07-10T04:59:43.478Z" + } + ] + }, + "news": { + "volumes": [ + "5732a254-c687-4868-b095-2e94e1144ae2", + "1141ff10-9ff6-4d5a-bbd9-2072326499ec", + "d6ee1242-9de5-4352-80af-a435ee29e0d3" + ], + "boxes": [ + "574a5170-7125-4e88-86fc-492e4b96a0ad", + "90d1d0c5-4803-4c19-a3e9-7b23172d783a", + "25dee7a0-6e94-479a-900d-d2475fddd1c8" + ] + }, + "planning": { + "2026-01": { + "volumes": [ + "d7815a06-bbac-4f6e-ae74-b5eb34142f7a", + "059dcc1b-3264-4518-acf0-b8d95c8f8dcd", + "93eb90d4-c493-4b7f-890f-9cdaad807e7c" + ], + "boxes": [ + "90d1d0c5-4803-4c19-a3e9-7b23172d783a", + "bd7a86b9-3b84-46f5-9325-b526ec9116e1", + "44704d1a-a6f6-4c07-823b-1c8d591395c4" + ] + } + }, + "recommendation": { + "08331a57-4edd-4c02-a4d3-9f8c68c000ff": [ + "5fa134d9-2426-40db-83bf-47efb1ae62ba", + [ + "66158cc3-d9d5-4067-be54-a43dd472fb78" + ] + ] + }, + "nativeAd": { + "offer_home_banner": null, + "volume_home_first": { + "id": "3cf0ffbd-7c1b-4c39-bf0e-32c214eafd10", + "volume_id": "5732a254-c687-4868-b095-2e94e1144ae2", + "title": "Découvrir", + "start_date": "2026-01-26", + "end_date": "2026-02-01" + }, + "volume_planning_perso": [ + { + "id": "cb457ea9-9e37-42e4-8fd4-290f8ef962b3", + "volume_id": "50ac476d-2bf8-4d39-8564-fe3625ba5822", + "series_ids": [ + "a9fde975-e150-4f04-a889-153f877f3a20" + ], + "start_date": "2026-01-12", + "end_date": "2026-02-08" + } + ] + }, + "amazonOffers": { + "example-asin": { + "asin": "example-asin", + "formatted_price": null, + "availability": null, + "merchant": "Example merchant", + "store_link": null + } + }, + "bdfugueOffers": { + "example-bdfugue-offer": { + "id": "example-bdfugue-offer", + "formatted_price": null, + "availability": null, + "merchant": "Example merchant", + "store_link": null + } + }, + "fnacOffers": { + "example-fnac-offer": { + "id": "example-fnac-offer", + "formatted_price": null, + "availability": null, + "merchant": "Example merchant", + "store_link": null + } + }, + "cart": { + "id": "bf204afd-43ba-4b72-8263-7ed149839023", + "store": "bdfugue", + "store_cart_sub_total": "92,29 €", + "store_cart_purchase_url": "https://api.mangacollec.com/cart/bf204afd-43ba-4b72-8263-7ed149839023/purchase?cart_purchase_url=https%3A%2F%2Fwww.bdfugue.com%2Fcheckout%2Fcart%2Feans%3Fref%3D358%26list%3D9782386585265%2C9782385038359%2C9791039142571%2C9782385038342%2C9782385035914%2C9791043305009%2C9782385035884%2C9782385035907%2C9782385035891%2C9782302107557%2C9782368777992", + "store_cart_active": true, + "items": [ + { + "id": "8a7ede56-3805-4351-a0c8-211d65332c58", + "cart_id": "bf204afd-43ba-4b72-8263-7ed149839023", + "volume_id": "5de24bb2-d199-4387-aec3-eff9af54f105", + "quantity": 1, + "created_at": "2026-01-25T19:23:45.449Z", + "store_cart_item_price": "6,95 €", + "store_cart_item_link": "https://www.bdfugue.com/archdemon-s-dilemma-tome-12?ref=358", + "store_cart_item_availability": "En stock !" + } + ], + "box_items": [] + } +} +