added rating books

This commit is contained in:
2025-10-29 22:38:38 +01:00
parent b4df375e4c
commit 26df6417b1
14 changed files with 353 additions and 153 deletions

View File

@@ -1,58 +1,91 @@
--users
INSERT INTO users(created_at, name, password) VALUES ('NOW', 'demo','$2a$10$7mfCBxBwIzXDU6r9az26o.zPX/r6IlNZVfU9zxSoLVtc0kRPimzba'); INSERT INTO users(created_at, name, password) VALUES ('NOW', 'demo','$2a$10$7mfCBxBwIzXDU6r9az26o.zPX/r6IlNZVfU9zxSoLVtc0kRPimzba');
INSERT INTO users(created_at, name, password) VALUES ('NOW', 'demo2','$2a$10$7mfCBxBwIzXDU6r9az26o.zPX/r6IlNZVfU9zxSoLVtc0kRPimzba'); INSERT INTO users(created_at, name, password) VALUES ('NOW', 'demo2','$2a$10$7mfCBxBwIzXDU6r9az26o.zPX/r6IlNZVfU9zxSoLVtc0kRPimzba');
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'O dingos, o chateaux!','Jean-Patrick Manchette', (SELECT id FROM users WHERE name = 'demo'));
-- cover
INSERT INTO static_files(name, path) VALUES ('odingosochateaux.jpg', 'odingosochateaux.jpg');
INSERT INTO static_files(name, path) VALUES ('le-petit-bleu-de-la-cote-ouest.jpg', 'le-petit-bleu-de-la-cote-ouest.jpg');
INSERT INTO static_files(name, path) VALUES ('dunchateaulautre.jpg', 'dunchateaulautre.jpg');
INSERT INTO static_files(name, path) VALUES ('lesdieuxontsoif.jpg', 'lesdieuxontsoif.jpg');
INSERT INTO static_files(name, path) VALUES ('rigodon.jpg', 'rigodon.jpg');
INSERT INTO static_files(name, path) VALUES ('Un_barrage_contre_le_Pacifique.jpg', 'Un_barrage_contre_le_Pacifique.jpg');
INSERT INTO static_files(name, path) VALUES ('salammbo.jpg', 'salammbo.jpg');
INSERT INTO static_files(name, path) VALUES ('Langage Machine.jpg', 'Langage Machine.jpg');
INSERT INTO static_files(name, path) VALUES ('lavilleetleschiens.jpg', 'lavilleetleschiens.jpg');
INSERT INTO static_files(name, path) VALUES ('la-fille-du-capitaine.jpg', 'la-fille-du-capitaine.jpg');
INSERT INTO static_files(name, path) VALUES ('Aurélien.jpg', 'Aurélien.jpg');
INSERT INTO static_files(name, path) VALUES ('duo.jpg', 'duo.jpg');
INSERT INTO static_files(name, path) VALUES ('gargantua.jpg', 'gargantua.jpg');
INSERT INTO static_files(name, path) VALUES ('viedejesus.jpg', 'viedejesus.jpg');
INSERT INTO static_files(name, path) VALUES ('hommesansqualités.jpg', 'hommesansqualités.jpg');
INSERT INTO static_files(name, path) VALUES ('lamaisonverte.jpg', 'lamaisonverte.jpg');
INSERT INTO static_files(name, path) VALUES ('lecoupdepistolet.jpg', 'lecoupdepistolet.jpg');
INSERT INTO static_files(name, path) VALUES ('desangfroid.jpg', 'desangfroid.jpg');
INSERT INTO static_files(name, path) VALUES ('lapositiondutireurcouché.jpg', 'lapositiondutireurcouché.jpg');
INSERT INTO static_files(name, path) VALUES ('verslephare.jpg', 'verslephare.jpg');
INSERT INTO static_files(name, path) VALUES ('insoutenablelégèretédeletre.jpg', 'insoutenablelégèretédeletre.jpg');
INSERT INTO static_files(name, path) VALUES ('lecomplotcontrelamerique.jpg', 'lecomplotcontrelamerique.jpg');
INSERT INTO static_files(name, path) VALUES ('Nord.jpg', 'Nord.jpg');
INSERT INTO static_files(name, path) VALUES ('sa+majesté+des+mouches.jpg', 'sa+majesté+des+mouches.jpg');
INSERT INTO static_files(name, path) VALUES ('Le_Pavillon_d_or.jpg', 'Le_Pavillon_d_or.jpg');
INSERT INTO static_files(name, path) VALUES ('lemeurtredotsuya.jpg', 'lemeurtredotsuya.jpg');
INSERT INTO static_files(name, path) VALUES ('dojoji.jpg', 'dojoji.jpg');
INSERT INTO static_files(name, path) VALUES ('noisy.jpg', 'noisy.jpg');
-- books
INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'O dingos, o chateaux!','Jean-Patrick Manchette', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'odingosochateaux.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'O dingos, o chateaux!'), true,7); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'O dingos, o chateaux!'), true,7);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Le petit bleu de la côte Ouest','Jean-Patrick Manchette', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Le petit bleu de la côte Ouest','Jean-Patrick Manchette', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'le-petit-bleu-de-la-cote-ouest.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le petit bleu de la côte Ouest'), true,7); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le petit bleu de la côte Ouest'), true,7);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'D''un château l''autre','Louis-Ferdinand Céline', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'D''un château l''autre','Louis-Ferdinand Céline', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'dunchateaulautre.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'D''un château l''autre'), true,10); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'D''un château l''autre'), true,10);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Les dieux ont soif','Anatole France', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Les dieux ont soif','Anatole France', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'lesdieuxontsoif.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Les dieux ont soif'), true,7); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Les dieux ont soif'), true,7);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Rigodon','Louis-Ferdinand Céline', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Rigodon','Louis-Ferdinand Céline', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'rigodon.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Rigodon'),true, 10); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Rigodon'),true, 10);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Un barrage contre le Pacifique','Marguerite Duras', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Un barrage contre le Pacifique','Marguerite Duras', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'Un_barrage_contre_le_Pacifique.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Un barrage contre le Pacifique'), true,7); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Un barrage contre le Pacifique'), true,7);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Salammbô','Flaubert Gustave', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Salammbô','Flaubert Gustave', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'salammbo.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Salammbô'), true,8); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Salammbô'), true,8);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Langage Machine','Romain Lucazeau', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Langage Machine','Romain Lucazeau', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'Langage Machine.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Langage Machine'), true,5); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Langage Machine'), true,5);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'La Ville et les chiens','Mario Vargas Llosa', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'La Ville et les chiens','Mario Vargas Llosa', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'lavilleetleschiens.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'La Ville et les chiens'),true,6); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'La Ville et les chiens'),true,6);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'La Fille Du Capitaine','A. Pouchkine', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'La Fille Du Capitaine','A. Pouchkine', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'la-fille-du-capitaine.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'La Fille Du Capitaine'),true,8); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'La Fille Du Capitaine'),true,8);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Aurélien','Louis Aragon', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Aurélien','Louis Aragon', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'Aurélien.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Aurélien'), true,8); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Aurélien'), true,8);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Duo','Colette', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Duo','Colette', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'duo.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Duo'),true,9); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Duo'),true,9);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Gargantua','François Rabelais', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Gargantua','François Rabelais', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'gargantua.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Gargantua'),true,7); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Gargantua'),true,7);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'The Life of Jesus','Ernest Renan', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'The Life of Jesus','Ernest Renan', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'viedejesus.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'The Life of Jesus'), false, NULL); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'The Life of Jesus'), false, NULL);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'L''Homme sans qualités, tome 1','Robert Musil', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'L''Homme sans qualités, tome 1','Robert Musil', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'hommesansqualités.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'L''Homme sans qualités, tome 1'), true,7); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'L''Homme sans qualités, tome 1'), true,7);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'The Green House','Mario Vargas Llosa', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'The Green House','Mario Vargas Llosa', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'lamaisonverte.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'The Green House'), true,6); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'The Green House'), true,6);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Le coup de pistolet','Alexandre Pouchkine', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Le coup de pistolet','Alexandre Pouchkine', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'lecoupdepistolet.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le coup de pistolet'),true,8); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le coup de pistolet'),true,8);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'De sang-froid','Truman Capote', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'De sang-froid','Truman Capote', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'desangfroid.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo2'),(SELECT id FROM books WHERE title = 'De sang-froid'),true,6); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo2'),(SELECT id FROM books WHERE title = 'De sang-froid'),true,6);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'La position du tireur couché','Jean-Patrick Manchette', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'La position du tireur couché','Jean-Patrick Manchette', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'lapositiondutireurcouché.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'La position du tireur couché'),true,6); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'La position du tireur couché'),true,6);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Vers le Phare','Virginia Woolf', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Vers le Phare','Virginia Woolf', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'verslephare.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Vers le Phare'),true,6); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Vers le Phare'),true,6);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'L''insoutenable légèreté de l''être', 'Milan Kundera', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'L''insoutenable légèreté de l''être', 'Milan Kundera', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'insoutenablelégèretédeletre.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo2'),(SELECT id FROM books WHERE title = 'L''insoutenable légèreté de l''être'), true,8); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo2'),(SELECT id FROM books WHERE title = 'L''insoutenable légèreté de l''être'), true,8);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Le complot contre l''Amérique','Philip Roth', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Le complot contre l''Amérique','Philip Roth', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'lecomplotcontrelamerique.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le complot contre l''Amérique'),true,6); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le complot contre l''Amérique'),true,6);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Nord','Louis-Ferdinand Céline', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Nord','Louis-Ferdinand Céline', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'Nord.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Nord'),true, 10); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Nord'),true, 10);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Sa majesté des mouches','William Golding', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Sa majesté des mouches','William Golding', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'sa+majesté+des+mouches.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Sa majesté des mouches'),true, 5); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Sa majesté des mouches'),true, 5);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Le Pavillon d''or','Yukio Mishima', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Le Pavillon d''or','Yukio Mishima', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'Le_Pavillon_d_or.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le Pavillon d''or'),true,8); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le Pavillon d''or'),true,8);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Le meurtre d''O-tsuya','Junichiro Tanizaki', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Le meurtre d''O-tsuya','Junichiro Tanizaki', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'lemeurtredotsuya.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le meurtre d''O-tsuya'),true, 7); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Le meurtre d''O-tsuya'),true, 7);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Dojoji et autres nouvelles','Yukio Mishima', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Dojoji et autres nouvelles','Yukio Mishima', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'dojoji.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Dojoji et autres nouvelles'),true,8); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Dojoji et autres nouvelles'),true,8);
INSERT INTO books(created_at, title, author, added_by_id) VALUES ('NOW', 'Noisy outlaws, unfriendly blobs, and some other things that aren''t as scary, maybe, depending on how you feel about lost lands, stray cellphones, creatures from the sky, parents who disappear in Peru, a man named Lars Farf, and one other story we couldn''t quite finish, so maybe you could help us out','Wolfeschlegelsteinhausenbergerdorffwelchevoralternwarengewissenhaftschaferswessenschafewarenwohlgepf', (SELECT id FROM users WHERE name = 'demo')); INSERT INTO books(created_at, title, author, added_by_id, cover_id) VALUES ('NOW', 'Noisy outlaws, unfriendly blobs, and some other things that aren''t as scary, maybe, depending on how you feel about lost lands, stray cellphones, creatures from the sky, parents who disappear in Peru, a man named Lars Farf, and one other story we couldn''t quite finish, so maybe you could help us out','Wolfeschlegelsteinhausenbergerdorffwelchevoralternwarengewissenhaftschaferswessenschafewarenwohlgepf', (SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM static_files WHERE name = 'noisy.jpg'));
INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Noisy outlaws, unfriendly blobs, and some other things that aren''t as scary, maybe, depending on how you feel about lost lands, stray cellphones, creatures from the sky, parents who disappear in Peru, a man named Lars Farf, and one other story we couldn''t quite finish, so maybe you could help us out'),true,2); INSERT INTO user_books(created_at, user_id, book_id, read, rating) VALUES ('NOW',(SELECT id FROM users WHERE name = 'demo'),(SELECT id FROM books WHERE title = 'Noisy outlaws, unfriendly blobs, and some other things that aren''t as scary, maybe, depending on how you feel about lost lands, stray cellphones, creatures from the sky, parents who disappear in Peru, a man named Lars Farf, and one other story we couldn''t quite finish, so maybe you could help us out'),true,2);

View File

@@ -12,10 +12,12 @@
"pinia": "^3.0.3", "pinia": "^3.0.3",
"vue": "^3.5.18", "vue": "^3.5.18",
"vue-i18n": "^11.1.12", "vue-i18n": "^11.1.12",
"vue-router": "^4.5.1" "vue-router": "^4.5.1",
"vuetify": "^3.10.8"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.31.0", "@eslint/js": "^9.31.0",
"@mdi/font": "^7.4.47",
"@vitejs/plugin-vue": "^6.0.1", "@vitejs/plugin-vue": "^6.0.1",
"@vue/eslint-config-prettier": "^10.2.0", "@vue/eslint-config-prettier": "^10.2.0",
"eslint": "^9.31.0", "eslint": "^9.31.0",
@@ -1256,6 +1258,13 @@
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
} }
}, },
"node_modules/@mdi/font": {
"version": "7.4.47",
"resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.4.47.tgz",
"integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/@pkgr/core": { "node_modules/@pkgr/core": {
"version": "0.2.9", "version": "0.2.9",
"resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
@@ -3916,6 +3925,33 @@
"vue": "^3.2.0" "vue": "^3.2.0"
} }
}, },
"node_modules/vuetify": {
"version": "3.10.8",
"resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.10.8.tgz",
"integrity": "sha512-TV1bx8mUjOPbhmEsamm38/CBcVe5DHYepOZGE6aQJ2uxvg96B4k+QHgIJcD5uKVfKmxKkJRtHdEXyq6JP9wBtg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/johnleider"
},
"peerDependencies": {
"typescript": ">=4.7",
"vite-plugin-vuetify": ">=2.1.0",
"vue": "^3.5.0",
"webpack-plugin-vuetify": ">=3.1.0"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
},
"vite-plugin-vuetify": {
"optional": true
},
"webpack-plugin-vuetify": {
"optional": true
}
}
},
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",

View File

@@ -18,10 +18,12 @@
"pinia": "^3.0.3", "pinia": "^3.0.3",
"vue": "^3.5.18", "vue": "^3.5.18",
"vue-i18n": "^11.1.12", "vue-i18n": "^11.1.12",
"vue-router": "^4.5.1" "vue-router": "^4.5.1",
"vuetify": "^3.10.8"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.31.0", "@eslint/js": "^9.31.0",
"@mdi/font": "^7.4.47",
"@vitejs/plugin-vue": "^6.0.1", "@vitejs/plugin-vue": "^6.0.1",
"@vue/eslint-config-prettier": "^10.2.0", "@vue/eslint-config-prettier": "^10.2.0",
"eslint": "^9.31.0", "eslint": "^9.31.0",

View File

@@ -2,6 +2,7 @@
import { computed } from 'vue' import { computed } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { getImagePathOrDefault } from './api.js' import { getImagePathOrDefault } from './api.js'
import { VRating } from 'vuetify/components/VRating';
const props = defineProps({ const props = defineProps({
id: Number, id: Number,
@@ -31,7 +32,15 @@ function openBook() {
<div class="media-content"> <div class="media-content">
<div class="is-size-4">{{title}}</div> <div class="is-size-4">{{title}}</div>
<div class="is-size-5 is-italic">{{author}}</div> <div class="is-size-5 is-italic">{{author}}</div>
<p>{{rating}}/10</p>
<VRating
half-increments
readonly
:length="5"
size="medium"
:model-value="rating/2"
active-color="bulma-body-color"
/>
</div> </div>
<nav v-if="read" class="level"> <nav v-if="read" class="level">
<div class="level-left"> <div class="level-left">

View File

@@ -1,7 +1,8 @@
<script setup> <script setup>
import { computed } from 'vue' import { computed } from 'vue'
import { getBook, getImagePathOrDefault } from './api.js' import { getBook, getImagePathOrDefault, putBookUpdate } from './api.js'
import { onBeforeRouteUpdate } from 'vue-router' import { onBeforeRouteUpdate } from 'vue-router'
import { VRating } from 'vuetify/components/VRating';
const props = defineProps({ const props = defineProps({
id: String id: String
@@ -15,6 +16,11 @@
error = res.error; error = res.error;
}) })
function onRatingUpdate(rating) {
data.value.rating = rating * 2
putBookUpdate(props.id, {rating: data.value.rating})
}
</script> </script>
<template> <template>
@@ -22,9 +28,21 @@
<div v-if="data"> <div v-if="data">
<h3 class="title">{{data.title}}</h3> <h3 class="title">{{data.title}}</h3>
<h3 class="subtitle">{{data.author}}</h3> <h3 class="subtitle">{{data.author}}</h3>
<div class="imagewithrating">
<figure class="image"> <figure class="image">
<img v-bind:src="imagePathOrDefault" v-bind:alt="data.title"> <img v-bind:src="imagePathOrDefault" v-bind:alt="data.title">
</figure> </figure>
<VRating
half-increments
hover
:length="5"
size="x-large"
density="compact"
:model-value="data.rating/2"
@update:modelValue="onRatingUpdate"
active-color="bulma-body-color"
/>
</div>
</div> </div>
</template> </template>
@@ -35,4 +53,10 @@ img {
height:auto; height:auto;
width:auto; width:auto;
} }
.imagewithrating {
vertical-align: top;
display: inline-block;
text-align: center;
}
</style> </style>

View File

@@ -1,6 +1,6 @@
<script setup> <script setup>
import { ref, computed } from 'vue' import { ref, computed } from 'vue'
import { postReadBook, getImagePathOrDefault } from './api.js' import { putReadBook, getImagePathOrDefault } from './api.js'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
const router = useRouter(); const router = useRouter();
@@ -16,7 +16,7 @@
const error = ref(null) const error = ref(null)
async function onUserBookRead() { async function onUserBookRead() {
const res = await postReadBook({bookId: props.id}); const res = await putReadBook(props.id);
if (res.ok) { if (res.ok) {
router.push('/books') router.push('/books')
} else { } else {

View File

@@ -42,11 +42,15 @@ export function getBook(id) {
} }
export function postBook(book) { export function postBook(book) {
return genericPostCall('/book', book.value) return genericPayloadCall('/book', book.value, 'POST')
} }
export async function postReadBook(userbook) { export async function putReadBook(bookId) {
return genericPostCall('/book/read', userbook) return putBookUpdate(bookId, {read: true})
}
export async function putBookUpdate(bookId, payload) {
return genericPayloadCall('/book/' + bookId, payload, 'PUT')
} }
export function postLogin(user) { export function postLogin(user) {
@@ -84,12 +88,12 @@ export function genericPostCallNoAuth(apiRoute, object) {
}) })
} }
export function genericPostCall(apiRoute, object) { export function genericPayloadCall(apiRoute, object, method) {
const { user } = useAuthStore(); const { user } = useAuthStore();
if (user != null) { if (user != null) {
return fetch(baseUrl + apiRoute, { return fetch(baseUrl + apiRoute, {
method: 'POST', method: method,
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'Authorization': 'Bearer ' + user.token 'Authorization': 'Bearer ' + user.token

View File

@@ -2,7 +2,10 @@ import { createApp } from 'vue'
import { createI18n } from "vue-i18n"; import { createI18n } from "vue-i18n";
import { createPinia } from 'pinia' import { createPinia } from 'pinia'
import { BootstrapIconsPlugin } from "bootstrap-icons-vue"; import { BootstrapIconsPlugin } from "bootstrap-icons-vue";
import { router } from './router.js' import { router } from './router.js';
import { createVuetify } from 'vuetify'
import { aliases, mdi } from 'vuetify/iconsets/mdi-svg'
import { VRating } from 'vuetify/components/VRating';
import App from './App.vue' import App from './App.vue'
import fr from './locales/fr.json'; import fr from './locales/fr.json';
@@ -17,6 +20,18 @@ const i18n = createI18n({
}); });
const vuetify = createVuetify({
VRating,
icons: {
defaultSet: 'mdi',
aliases,
sets: {
mdi,
},
},
})
const pinia = createPinia() const pinia = createPinia()
createApp(App).use(i18n).use(pinia).use(BootstrapIconsPlugin).use(router).mount('#app')
createApp(App).use(i18n).use(vuetify).use(pinia).use(BootstrapIconsPlugin).use(router).mount('#app')

View File

@@ -1,43 +0,0 @@
package apitest
import (
"fmt"
"log"
"net/http"
"net/http/httptest"
"strings"
"testing"
"git.artlef.fr/PersonalLibraryManager/internal/testutils"
"github.com/stretchr/testify/assert"
)
func TestPostBookReadHandler_Ok(t *testing.T) {
userBookJson :=
`{
"bookId": 6
}`
testPostBookReadHandler(t, userBookJson, http.StatusOK)
}
func TestPostBookReadHandler_IDDoesNotExist(t *testing.T) {
userBookJson :=
`{
"bookId": 46546
}`
testPostBookReadHandler(t, userBookJson, http.StatusNotFound)
}
func testPostBookReadHandler(t *testing.T, userBookJson string, expectedCode int) {
router := testutils.TestSetup()
w := httptest.NewRecorder()
token := testutils.ConnectDemo2User(router)
req, _ := http.NewRequest("POST", "/book/read",
strings.NewReader(string(userBookJson)))
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token))
router.ServeHTTP(w, req)
log.Printf("%s\n", w.Body.String())
assert.Equal(t, expectedCode, w.Code)
}

View File

@@ -0,0 +1,90 @@
package apitest
import (
"fmt"
"net/http"
"net/http/httptest"
"strings"
"testing"
"git.artlef.fr/PersonalLibraryManager/internal/testutils"
"github.com/stretchr/testify/assert"
)
func TestPutBookUpdate_NewReadOk(t *testing.T) {
payload :=
`{
"read": true
}`
testPutUserBooksHandler(t, payload, "21", http.StatusOK)
}
func TestPutUserBooksHandler_UpdateRating(t *testing.T) {
payload :=
`{
"rating": 5
}`
bookId := "17"
testPutUserBooksHandler(t, payload, bookId, http.StatusOK)
book := testGetBook(t, bookId, http.StatusOK)
assert.Equal(t, 5, book.Rating)
assert.Equal(t, true, book.Read)
}
func TestPutUserBooksHandler_RateNewBookMakeItRead(t *testing.T) {
payload :=
`{
"rating": 7
}`
bookId := "18"
testPutUserBooksHandler(t, payload, bookId, http.StatusOK)
book := testGetBook(t, bookId, http.StatusOK)
assert.Equal(t, 7, book.Rating)
assert.Equal(t, true, book.Read)
}
func TestPutUserBooksHandler_RatingTypeWrong(t *testing.T) {
payload :=
`{
"rating": "bad"
}`
bookId := "18"
testPutUserBooksHandler(t, payload, bookId, http.StatusInternalServerError)
}
func TestPutUserBooksHandler_RatingMin(t *testing.T) {
payload :=
`{
"rating": -3
}`
bookId := "18"
testPutUserBooksHandler(t, payload, bookId, http.StatusBadRequest)
}
func TestPutUserBooksHandler_RatingMax(t *testing.T) {
payload :=
`{
"rating": 15
}`
bookId := "18"
testPutUserBooksHandler(t, payload, bookId, http.StatusBadRequest)
}
func TestPutUserBooksHandler_BadBookId(t *testing.T) {
payload :=
`{
"rating": 15
}`
bookId := "18574"
testPutUserBooksHandler(t, payload, bookId, http.StatusNotFound)
}
func testPutUserBooksHandler(t *testing.T, payload string, bookId string, expectedCode int) {
router := testutils.TestSetup()
token := testutils.ConnectDemoUser(router)
req, _ := http.NewRequest("PUT", "/book/"+bookId, strings.NewReader(payload))
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token))
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
assert.Equal(t, expectedCode, w.Code)
}

View File

@@ -1,63 +0,0 @@
package routes
import (
"errors"
"net/http"
"git.artlef.fr/PersonalLibraryManager/internal/appcontext"
"git.artlef.fr/PersonalLibraryManager/internal/model"
"git.artlef.fr/PersonalLibraryManager/internal/myvalidator"
"gorm.io/gorm"
)
type bookPostMarkAsRead struct {
BookID uint `json:"bookId" binding:"required"`
}
func PostBookReadHandler(ac appcontext.AppContext) {
var userbook bookPostMarkAsRead
err := ac.C.ShouldBindJSON(&userbook)
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
err = myvalidator.ValidateId(ac.Db, userbook.BookID, &model.Book{})
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
user, fetchUserErr := ac.GetAuthenticatedUser()
if fetchUserErr != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
var userbookDb model.UserBook
res := ac.Db.Where("user_id = ? AND book_id = ?", user.ID, userbook.BookID).First(&userbookDb)
err = res.Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
userbookDb = userBookWsToDb(userbook, &user)
err = ac.Db.Save(&userbookDb).Error
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
} else {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
} else {
userbookDb.Read = true
ac.Db.Save(&userbookDb)
}
ac.C.String(http.StatusOK, "Success")
}
func userBookWsToDb(ub bookPostMarkAsRead, user *model.User) model.UserBook {
return model.UserBook{
UserID: user.ID,
BookID: ub.BookID,
Read: true,
}
}

View File

@@ -0,0 +1,13 @@
package routes
import "git.artlef.fr/PersonalLibraryManager/internal/appcontext"
type bookPutUpdate struct {
Title string `json:"title" binding:"required,max=300"`
Author string `json:"author" binding:"max=100"`
CoverID uint `json:"coverId"`
}
func PutBookHandler(ac appcontext.AppContext) {
}

View File

@@ -0,0 +1,80 @@
package routes
import (
"errors"
"net/http"
"strconv"
"git.artlef.fr/PersonalLibraryManager/internal/appcontext"
"git.artlef.fr/PersonalLibraryManager/internal/model"
"git.artlef.fr/PersonalLibraryManager/internal/myvalidator"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type userbookPutUpdate struct {
Read bool `json:"read"`
Rating int `json:"rating" binding:"min=0,max=10"`
}
func PutUserBookHandler(ac appcontext.AppContext) {
bookId64, err := strconv.ParseUint(ac.C.Param("id"), 10, 64)
bookId := uint(bookId64)
if err != nil {
ac.C.JSON(http.StatusBadRequest, gin.H{"error": err})
return
}
err = myvalidator.ValidateId(ac.Db, bookId, &model.Book{})
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
var userbook userbookPutUpdate
err = ac.C.ShouldBindJSON(&userbook)
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
user, fetchUserErr := ac.GetAuthenticatedUser()
if fetchUserErr != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
//a rating of 0 means no rating
// if there is a rating, read is forced to true
userbook.Read = userbook.Read || userbook.Rating > 0
var userbookDb model.UserBook
res := ac.Db.Where("user_id = ? AND book_id = ?", user.ID, bookId).First(&userbookDb)
err = res.Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
userbookDb = userBookWsToDb(userbook, bookId, &user)
err = ac.Db.Save(&userbookDb).Error
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
} else {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
} else {
userbookDb.Read = userbook.Read
if userbook.Rating > 0 {
userbookDb.Rating = userbook.Rating
}
ac.Db.Save(&userbookDb)
}
ac.C.String(http.StatusOK, "Success")
}
func userBookWsToDb(ub userbookPutUpdate, bookId uint, user *model.User) model.UserBook {
return model.UserBook{
UserID: user.ID,
BookID: bookId,
Read: ub.Read,
Rating: ub.Rating,
}
}

View File

@@ -33,12 +33,12 @@ func Setup(config *config.Config) *gin.Engine {
r.GET("/book/:id", func(c *gin.Context) { r.GET("/book/:id", func(c *gin.Context) {
routes.GetBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) routes.GetBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config})
}) })
r.PUT("/book/:id", func(c *gin.Context) {
routes.PutUserBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config})
})
r.POST("/book", func(c *gin.Context) { r.POST("/book", func(c *gin.Context) {
routes.PostBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) routes.PostBookHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config})
}) })
r.POST("/book/read", func(c *gin.Context) {
routes.PostBookReadHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config})
})
r.POST("/auth/signup", func(c *gin.Context) { r.POST("/auth/signup", func(c *gin.Context) {
routes.PostSignupHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config}) routes.PostSignupHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config})
}) })