96 lines
2.5 KiB
Go
96 lines
2.5 KiB
Go
package routes
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"git.artlef.fr/PersonalLibraryManager/internal/appcontext"
|
|
"git.artlef.fr/PersonalLibraryManager/internal/inventaire"
|
|
"git.artlef.fr/PersonalLibraryManager/internal/myvalidator"
|
|
"git.artlef.fr/PersonalLibraryManager/internal/openlibrary"
|
|
"git.artlef.fr/PersonalLibraryManager/internal/query"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func GetSearchBooksHandler(ac appcontext.AppContext) {
|
|
searchterm := ac.C.Param("searchterm")
|
|
|
|
user, fetchUserErr := ac.GetAuthenticatedUser()
|
|
if fetchUserErr != nil {
|
|
myvalidator.ReturnErrorsAsJsonResponse(&ac, fetchUserErr)
|
|
return
|
|
}
|
|
|
|
limit, err := ac.GetQueryLimit()
|
|
if err != nil {
|
|
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
|
|
return
|
|
}
|
|
offset, err := ac.GetQueryOffset()
|
|
if err != nil {
|
|
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 []query.BookSearchGet
|
|
if len(books) > 0 {
|
|
returnedBooks = books
|
|
} else {
|
|
queryResult, err := inventaire.CallInventaireSearch(searchterm, limit, offset)
|
|
if err != nil {
|
|
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
|
|
return
|
|
}
|
|
returnedBooks = OpenLibraryBooksToBookSearchGet(queryResult.Results)
|
|
}
|
|
ac.C.JSON(http.StatusOK, returnedBooks)
|
|
}
|
|
|
|
func OpenLibraryBooksToBookSearchGet(OLbooks []inventaire.InventaireSearchBook) []query.BookSearchGet {
|
|
var books []query.BookSearchGet
|
|
for _, b := range OLbooks {
|
|
bookSearchGet := query.BookSearchGet{
|
|
ID: 0,
|
|
Title: b.Label,
|
|
Author: "",
|
|
InventaireID: b.ID,
|
|
Rating: 0,
|
|
Read: false,
|
|
WantRead: false,
|
|
CoverPath: "",
|
|
}
|
|
books = append(books, bookSearchGet)
|
|
}
|
|
return books
|
|
}
|
|
|
|
func GetSearchBooksCountHandler(ac appcontext.AppContext) {
|
|
searchterm := ac.C.Param("searchterm")
|
|
|
|
user, fetchUserErr := ac.GetAuthenticatedUser()
|
|
if fetchUserErr != nil {
|
|
myvalidator.ReturnErrorsAsJsonResponse(&ac, fetchUserErr)
|
|
return
|
|
}
|
|
count, err := query.FetchBookSearchGetCount(ac.Db, user.ID, searchterm)
|
|
if err != nil {
|
|
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
|
|
return
|
|
}
|
|
var finalCount int64
|
|
if count > 0 {
|
|
finalCount = count
|
|
} else {
|
|
queryResult, err := openlibrary.CallOpenLibrarySearch(searchterm, 0, 0)
|
|
if err != nil {
|
|
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
|
|
return
|
|
}
|
|
finalCount = int64(queryResult.NumFound)
|
|
}
|
|
ac.C.JSON(http.StatusOK, gin.H{"count": finalCount})
|
|
}
|