From 27a9faf704584e5da52fc7cad585d9f77688e78f Mon Sep 17 00:00:00 2001 From: Arthur Lefebvre Date: Thu, 29 Jan 2026 18:25:16 +0100 Subject: [PATCH] Add a button to choose to query inventaire from search --- front/src/BookListElement.vue | 8 ++++++-- front/src/ImportListElement.vue | 7 ++++++- front/src/SearchBook.vue | 28 ++++++++++++++++++++++++++-- front/src/api.js | 4 ++-- front/src/locales/en.json | 5 ++++- front/src/locales/fr.json | 5 ++++- internal/dto/in.go | 3 ++- internal/dto/out.go | 5 +++-- internal/routes/booksearchget.go | 19 ++++++++++--------- 9 files changed, 63 insertions(+), 21 deletions(-) diff --git a/front/src/BookListElement.vue b/front/src/BookListElement.vue index 4a0c378..c18da9c 100644 --- a/front/src/BookListElement.vue +++ b/front/src/BookListElement.vue @@ -43,7 +43,7 @@ function openBook() {

{{error}}

-
+
@@ -55,7 +55,7 @@ function openBook() {
{{description}}
-
+
-
+
@@ -55,6 +55,11 @@ img { width:auto; } + +.clickable { + cursor:pointer +} + .box { transition:ease-in-out 0.04s; margin-bottom: 15px; diff --git a/front/src/SearchBook.vue b/front/src/SearchBook.vue index c5688b2..c4bba26 100644 --- a/front/src/SearchBook.vue +++ b/front/src/SearchBook.vue @@ -15,6 +15,12 @@ authorId: Number }); + const forceSearchInventaire = ref(false); + + const searchInventaire = computed(() => { + return forceSearchInventaire.value || (data.value !== null && data.value['inventaire']) + }); + let data = ref(null); let error = ref(null); @@ -27,9 +33,11 @@ function fetchData(searchTerm, authorId) { + data.value = null; + error.value = null; if (searchTerm != null) { const lang = navigator.language.substring(0,2); - getSearchBooks(data, error, searchTerm, lang, limit, offset.value); + getSearchBooks(data, error, searchTerm, lang, forceSearchInventaire.value, limit, offset.value); } else if (authorId != null) { getAuthorBooks(data, error, authorId, limit, offset.value); } @@ -46,15 +54,26 @@ fetchData(props.searchterm, props.authorId); } + function toggleSearchInventaire() { + pageNumber.value = 1; + forceSearchInventaire.value = !forceSearchInventaire.value; + fetchData(props.searchterm, props.authorId) + window.scrollTo(0,0); + } + - + diff --git a/front/src/api.js b/front/src/api.js index c0ee8b0..2d557aa 100644 --- a/front/src/api.js +++ b/front/src/api.js @@ -41,8 +41,8 @@ export function getMyBooks(data, error, arg, limit, offset) { return useFetch(data, error, baseUrl + '/mybooks/' + arg + "?" + queryParams.toString()); } -export function getSearchBooks(data, error, searchterm, lang, limit, offset) { - const queryParams = new URLSearchParams({lang: lang, limit: limit, offset: offset}); +export function getSearchBooks(data, error, searchterm, lang, searchInventaire, limit, offset) { + const queryParams = new URLSearchParams({lang: lang, inventaire: searchInventaire, limit: limit, offset: offset}); return useFetch(data, error, baseUrl + '/search/' + encodeURIComponent(searchterm) + "?" + queryParams.toString()); } diff --git a/front/src/locales/en.json b/front/src/locales/en.json index 2588da8..f2cfdb1 100644 --- a/front/src/locales/en.json +++ b/front/src/locales/en.json @@ -36,7 +36,10 @@ "searchbook": { "error": "Error when loading books: {error}", "loading": "Loading...", - "noresult": "No results found." + "noresult": "No results found.", + "importinventaire": "Import from inventaire.io", + "searchinventaire": "Load more results from inventaire.io", + "backtosearch": "Go back to regular search" }, "booklistelement": { "read": "Read", diff --git a/front/src/locales/fr.json b/front/src/locales/fr.json index 5b30cdf..1485bca 100644 --- a/front/src/locales/fr.json +++ b/front/src/locales/fr.json @@ -36,7 +36,10 @@ "searchbook": { "error": "Erreur pendant le chargement des livres: {error}", "loading": "Chargement...", - "noresult": "Aucun résultat trouvé." + "noresult": "Aucun résultat trouvé.", + "importinventaire": "Importer depuis inventaire.io", + "searchinventaire": "Charger plus de résultats depuis inventaire.io", + "backtosearch": "Retourner à la recherche" }, "booklistelement": { "read": "Lu", diff --git a/internal/dto/in.go b/internal/dto/in.go index ab37a73..d664253 100644 --- a/internal/dto/in.go +++ b/internal/dto/in.go @@ -6,7 +6,8 @@ type AuthorGet struct { } type BookSearchGetParam struct { - Lang string `form:"lang" binding:"max=5"` + Lang string `form:"lang" binding:"max=5"` + Inventaire bool `form:"inventaire"` } type BookPostCreate struct { diff --git a/internal/dto/out.go b/internal/dto/out.go index 2760387..cb17bbb 100644 --- a/internal/dto/out.go +++ b/internal/dto/out.go @@ -31,8 +31,9 @@ type BookUserGetBook struct { } type BookSearchGet struct { - Count int64 `json:"count"` - Books []BookSearchGetBook `json:"books"` + Count int64 `json:"count"` + Inventaire bool `json:"inventaire"` + Books []BookSearchGetBook `json:"books"` } type BookSearchGetBook struct { diff --git a/internal/routes/booksearchget.go b/internal/routes/booksearchget.go index 77b1f4d..b79abcb 100644 --- a/internal/routes/booksearchget.go +++ b/internal/routes/booksearchget.go @@ -36,20 +36,21 @@ func GetSearchBooksHandler(ac appcontext.AppContext) { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return } - books, err := query.FetchBookSearchGet(ac.Db, user.ID, searchterm, limit, offset) - if err != nil { - myvalidator.ReturnErrorsAsJsonResponse(&ac, err) - return - } var returnedBooks dto.BookSearchGet - if len(books) > 0 { + if !params.Inventaire { + books, err := query.FetchBookSearchGet(ac.Db, user.ID, searchterm, limit, offset) + if err != nil { + myvalidator.ReturnErrorsAsJsonResponse(&ac, err) + return + } count, err := query.FetchBookSearchGetCount(ac.Db, user.ID, searchterm) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return } - returnedBooks = dto.BookSearchGet{Count: count, Books: books} - } else { + returnedBooks = dto.BookSearchGet{Count: count, Inventaire: false, Books: books} + } + if params.Inventaire || len(returnedBooks.Books) == 0 { queryResult, err := inventaire.CallInventaireSearch(searchterm, params.Lang, limit, offset) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) @@ -80,5 +81,5 @@ func InventaireBooksToBookSearchGet(results inventaire.InventaireSearchResult) d } books = append(books, bookSearchGetBook) } - return dto.BookSearchGet{Count: results.Total, Books: books} + return dto.BookSearchGet{Count: results.Total, Inventaire: true, Books: books} }