From 178c688203797ed741f410d58318abf0cf10c0e5 Mon Sep 17 00:00:00 2001 From: Arthur Lefebvre Date: Sun, 12 Apr 2026 01:44:25 +0200 Subject: [PATCH] Collections: allow to drag and drop to change book position --- demodata.sql | 12 +- front/src/CollectionForm.vue | 54 ++++++++- front/src/CollectionFormElement.vue | 14 ++- front/src/api.js | 10 +- internal/adapter/adapter.go | 1 + internal/apitest/fetchallcollections_test.go | 4 +- .../post_collection_changeposition_test.go | 113 ++++++++++++++++++ internal/dto/in.go | 5 + internal/dto/out.go | 1 + internal/i18nresource/locale.en.toml | 1 + internal/i18nresource/locale.fr.toml | 1 + internal/query/querycollections.go | 3 +- internal/routes/collectionaddbookpost.go | 12 +- .../routes/collectionchangepositionpost.go | 106 ++++++++++++++++ internal/setup/setup.go | 3 + 15 files changed, 328 insertions(+), 12 deletions(-) create mode 100644 internal/apitest/post_collection_changeposition_test.go create mode 100644 internal/routes/collectionchangepositionpost.go diff --git a/demodata.sql b/demodata.sql index 6c5cdee..3ea576a 100644 --- a/demodata.sql +++ b/demodata.sql @@ -131,6 +131,7 @@ INSERT INTO collections(name, user_id) VALUES ('Littérature française',(SELECT INSERT INTO collections(name, user_id) VALUES ('Nouvelles',(SELECT id FROM users WHERE name = 'demo')); INSERT INTO collections(name, user_id) VALUES ('Non fiction',(SELECT id FROM users WHERE name = 'demo2')); INSERT INTO collections(name, user_id) VALUES ('Empty',(SELECT id FROM users WHERE name = 'demo')); +INSERT INTO collections(name, user_id) VALUES ('Lu récemment',(SELECT id FROM users WHERE name = 'demo')); INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Littérature française'), (SELECT id FROM books WHERE title = 'Nord'), 1); INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Littérature française'), (SELECT id FROM books WHERE title = 'Gargantua'), 2); @@ -142,8 +143,17 @@ INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT i INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Nouvelles'), (SELECT id FROM books WHERE title = 'Dojoji et autres nouvelles'), 1); INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Nouvelles'), (SELECT id FROM books WHERE title = 'Le meurtre d''O-tsuya'), 2); INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Nouvelles'), (SELECT id FROM books WHERE title = 'Le coup de pistolet'), 3); -INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Nouvelles'), (SELECT id FROM books WHERE title = 'Duo'), 3); +INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Nouvelles'), (SELECT id FROM books WHERE title = 'Duo'), 4); INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Non fiction'), (SELECT id FROM books WHERE title = 'Recherches philosophiques'), 1); INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Non fiction'), (SELECT id FROM books WHERE title = 'De sang-froid'), 2); INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Non fiction'), (SELECT id FROM books WHERE title = 'The Life of Jesus'), 3); + +INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Lu récemment'), (SELECT id FROM books WHERE title = 'L''Homme sans qualités, tome 1'), 1); +INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Lu récemment'), (SELECT id FROM books WHERE title = 'Iliade'), 2); +INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Lu récemment'), (SELECT id FROM books WHERE title = 'Duo'), 3); +INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Lu récemment'), (SELECT id FROM books WHERE title = 'De sang-froid'), 4); +INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Lu récemment'), (SELECT id FROM books WHERE title = 'Le Pavillon d''or'), 5); +INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Lu récemment'), (SELECT id FROM books WHERE title = 'Recherches philosophiques'), 6); +INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Lu récemment'), (SELECT id FROM books WHERE title = 'Dojoji et autres nouvelles'), 7); +INSERT INTO collection_items(collection_id, book_id, position) VALUES ((SELECT id FROM collections WHERE name = 'Lu récemment'), (SELECT id FROM books WHERE title = 'Le château'), 8); diff --git a/front/src/CollectionForm.vue b/front/src/CollectionForm.vue index 1c25056..bdcd2c2 100644 --- a/front/src/CollectionForm.vue +++ b/front/src/CollectionForm.vue @@ -1,6 +1,6 @@