From 7921a83f303cb9dec9c75e79ad7ca717b94e404d Mon Sep 17 00:00:00 2001 From: Arthur Lefebvre Date: Thu, 22 Jan 2026 13:37:42 +0100 Subject: [PATCH] Add language to inventaire search book --- front/src/SearchBook.vue | 3 ++- front/src/api.js | 4 ++-- internal/callapiutils/callapiutils.go | 2 ++ internal/inventaire/inventaire.go | 5 ++++- internal/inventaire/inventaire_test.go | 15 ++++++++++++--- internal/routes/booksearchget.go | 13 +++++++++++-- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/front/src/SearchBook.vue b/front/src/SearchBook.vue index 7cf8f44..4f843a1 100644 --- a/front/src/SearchBook.vue +++ b/front/src/SearchBook.vue @@ -30,7 +30,8 @@ function fetchData(searchTerm, authorId) { if (searchTerm != null) { - getSearchBooks(data, error, searchTerm, limit, offset.value); + let lang = navigator.language.substring(0,2); + getSearchBooks(data, error, searchTerm, lang, limit, offset.value); getCountSearchBooks(totalBooksData, errorFetchTotal, searchTerm); } else if (authorId != null) { getAuthorBooks(data, error, authorId, limit, offset.value); diff --git a/front/src/api.js b/front/src/api.js index 70aee37..e456a89 100644 --- a/front/src/api.js +++ b/front/src/api.js @@ -41,8 +41,8 @@ export function getCountSearchBooks(data, error, searchterm) { return useFetch(data, error,baseUrl + '/search/' + encodeURIComponent(searchterm) + '/count') } -export function getSearchBooks(data, error, searchterm, limit, offset) { - const queryParams = new URLSearchParams({limit: limit, offset: offset}); +export function getSearchBooks(data, error, searchterm, lang, limit, offset) { + const queryParams = new URLSearchParams({lang: lang, limit: limit, offset: offset}); return useFetch(data, error, baseUrl + '/search/' + encodeURIComponent(searchterm) + "?" + queryParams.toString()); } diff --git a/internal/callapiutils/callapiutils.go b/internal/callapiutils/callapiutils.go index 613ccb1..51c91b0 100644 --- a/internal/callapiutils/callapiutils.go +++ b/internal/callapiutils/callapiutils.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "io" + "log" "net/http" "net/url" "strconv" @@ -21,6 +22,7 @@ func AddQueryParam(u *url.URL, paramName string, paramValue string) { func FetchAndParseResult[T any](u *url.URL, queryResult *T) error { resp, err := DoApiQuery(u) + log.Printf("Calling GET %s", u.String()) if err != nil { return err } diff --git a/internal/inventaire/inventaire.go b/internal/inventaire/inventaire.go index 928aa3f..223f90b 100644 --- a/internal/inventaire/inventaire.go +++ b/internal/inventaire/inventaire.go @@ -27,12 +27,15 @@ func computeInventaireApiUrl(paths ...string) (*url.URL, error) { return callapiutils.ComputeUrl(baseUrl, paths...) } -func CallInventaireSearch(searchterm string, limit int, offset int) (InventaireSearchResult, error) { +func CallInventaireSearch(searchterm string, lang string, limit int, offset int) (InventaireSearchResult, error) { var queryResult InventaireSearchResult u, err := computeInventaireApiUrl("search") if err != nil { return queryResult, err } + if lang != "" { + callapiutils.AddQueryParam(u, "lang", lang) + } if limit != 0 { callapiutils.AddQueryParamInt(u, "limit", limit) } diff --git a/internal/inventaire/inventaire_test.go b/internal/inventaire/inventaire_test.go index 8b15bc5..7caa187 100644 --- a/internal/inventaire/inventaire_test.go +++ b/internal/inventaire/inventaire_test.go @@ -6,8 +6,17 @@ import ( "github.com/stretchr/testify/assert" ) +func TestCallInventaireSearch_NoParameters(t *testing.T) { + result, err := CallInventaireSearch("salammbo", "", 0, 0) + if err != nil { + t.Error(err) + } + assert.Equal(t, 17, result.Total) + assert.Equal(t, 10, len(result.Results)) +} + func TestCallInventaireSearch_NoLimit(t *testing.T) { - result, err := CallInventaireSearch("salammbo", 0, 0) + result, err := CallInventaireSearch("salammbo", "fr", 0, 0) if err != nil { t.Error(err) } @@ -16,7 +25,7 @@ func TestCallInventaireSearch_NoLimit(t *testing.T) { } func TestCallInventaireSearch_Limit(t *testing.T) { - result, err := CallInventaireSearch("salammbo", 5, 0) + result, err := CallInventaireSearch("salammbo", "fr", 5, 0) if err != nil { t.Error(err) } @@ -25,7 +34,7 @@ func TestCallInventaireSearch_Limit(t *testing.T) { } func TestCallInventaireSearch_Offset(t *testing.T) { - result, err := CallInventaireSearch("salammbo", 0, 15) + result, err := CallInventaireSearch("salammbo", "fr", 0, 15) if err != nil { t.Error(err) } diff --git a/internal/routes/booksearchget.go b/internal/routes/booksearchget.go index 9e9944c..5d2f0cf 100644 --- a/internal/routes/booksearchget.go +++ b/internal/routes/booksearchget.go @@ -12,9 +12,18 @@ import ( "github.com/gin-gonic/gin" ) +type bookGetSearch struct { + Lang string `form:"lang" binding:"max=5"` +} + func GetSearchBooksHandler(ac appcontext.AppContext) { searchterm := ac.C.Param("searchterm") - + var params bookGetSearch + err := ac.C.ShouldBind(¶ms) + if err != nil { + myvalidator.ReturnErrorsAsJsonResponse(&ac, err) + return + } user, fetchUserErr := ac.GetAuthenticatedUser() if fetchUserErr != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, fetchUserErr) @@ -40,7 +49,7 @@ func GetSearchBooksHandler(ac appcontext.AppContext) { if len(books) > 0 { returnedBooks = books } else { - queryResult, err := inventaire.CallInventaireSearch(searchterm, limit, offset) + queryResult, err := inventaire.CallInventaireSearch(searchterm, params.Lang, limit, offset) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return