-
{{$t('bookbrowser.error', {error: error.message})}}
diff --git a/front/src/api.js b/front/src/api.js
index 6501d3b..bd25852 100644
--- a/front/src/api.js
+++ b/front/src/api.js
@@ -29,8 +29,8 @@ function useFetch(url) {
return { data, error }
}
-export function getMyBooks() {
- return useFetch(baseUrl + '/mybooks');
+export function getMyBooks(arg) {
+ return useFetch(baseUrl + '/mybooks/' + arg);
}
export function getSearchBooks(searchterm) {
diff --git a/front/src/locales/en.json b/front/src/locales/en.json
index f1400e4..4ce59e7 100644
--- a/front/src/locales/en.json
+++ b/front/src/locales/en.json
@@ -28,7 +28,9 @@
},
"bookbrowser": {
"error": "Error when loading books: {error}",
- "loading": "Loading..."
+ "loading": "Loading...",
+ "read": "Read",
+ "wantread": "To read"
},
"searchbook": {
"error": "Error when loading books: {error}",
diff --git a/front/src/locales/fr.json b/front/src/locales/fr.json
index 35f64d1..ad5c26f 100644
--- a/front/src/locales/fr.json
+++ b/front/src/locales/fr.json
@@ -28,7 +28,9 @@
},
"bookbrowser": {
"error": "Erreur pendant le chargement des livres: {error}",
- "loading": "Chargement..."
+ "loading": "Chargement...",
+ "read": "Lu",
+ "wantread": "À lire"
},
"searchbook": {
"error": "Erreur pendant le chargement des livres: {error}",
diff --git a/internal/apitest/get_read_user_book_test.go b/internal/apitest/get_read_user_book_test.go
new file mode 100644
index 0000000..516788c
--- /dev/null
+++ b/internal/apitest/get_read_user_book_test.go
@@ -0,0 +1,50 @@
+package apitest
+
+import (
+ "testing"
+
+ "git.artlef.fr/PersonalLibraryManager/internal/testutils"
+ "github.com/gin-gonic/gin"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestGetReadBooksHandler_Demo(t *testing.T) {
+ router := testutils.TestSetup()
+
+ token := testutils.ConnectDemoUser(router)
+ books := testGetReadBooksHandler(t, router, token, 200)
+ assert.Equal(t, 23, len(books))
+}
+
+func TestGetReadBooksHandler_Demo2(t *testing.T) {
+ router := testutils.TestSetup()
+
+ token := testutils.ConnectDemo2User(router)
+ books := testGetReadBooksHandler(t, router, token, 200)
+ assert.Equal(t, 2, len(books))
+}
+
+func TestGetReadBooksHandler_CheckOneBook(t *testing.T) {
+ router := testutils.TestSetup()
+
+ token := testutils.ConnectDemo2User(router)
+ books := testGetReadBooksHandler(t, router, token, 200)
+ var book bookUserGet
+ for _, b := range books {
+ if b.Title == "De sang-froid" {
+ book = b
+ }
+ }
+ assert.Equal(t,
+ bookUserGet{
+ BookId: 18,
+ Title: "De sang-froid",
+ Author: "Truman Capote",
+ Rating: 6,
+ Read: true,
+ }, book)
+}
+
+func testGetReadBooksHandler(t *testing.T, router *gin.Engine, userToken string, expectedCode int) []bookUserGet {
+ return testGetbooksHandler(t, router, userToken, expectedCode, "/mybooks/read")
+}
diff --git a/internal/apitest/get_user_book_test.go b/internal/apitest/get_user_book_test.go
index 081ffd8..6b1c325 100644
--- a/internal/apitest/get_user_book_test.go
+++ b/internal/apitest/get_user_book_test.go
@@ -7,7 +7,6 @@ import (
"net/http/httptest"
"testing"
- "git.artlef.fr/PersonalLibraryManager/internal/testutils"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/assert"
@@ -22,45 +21,8 @@ type bookUserGet struct {
WantRead bool `json:"wantread"`
}
-func TestGetBooksHandler_Demo(t *testing.T) {
- router := testutils.TestSetup()
-
- token := testutils.ConnectDemoUser(router)
- books := testGetbooksHandler(t, router, token, 200)
- assert.Equal(t, 26, len(books))
-}
-
-func TestGetBooksHandler_Demo2(t *testing.T) {
- router := testutils.TestSetup()
-
- token := testutils.ConnectDemo2User(router)
- books := testGetbooksHandler(t, router, token, 200)
- assert.Equal(t, 2, len(books))
-}
-
-func TestGetBooksHandler_CheckOneBook(t *testing.T) {
- router := testutils.TestSetup()
-
- token := testutils.ConnectDemo2User(router)
- books := testGetbooksHandler(t, router, token, 200)
- var book bookUserGet
- for _, b := range books {
- if b.Title == "De sang-froid" {
- book = b
- }
- }
- assert.Equal(t,
- bookUserGet{
- BookId: 18,
- Title: "De sang-froid",
- Author: "Truman Capote",
- Rating: 6,
- Read: true,
- }, book)
-}
-
-func testGetbooksHandler(t *testing.T, router *gin.Engine, userToken string, expectedCode int) []bookUserGet {
- req, _ := http.NewRequest("GET", "/mybooks", nil)
+func testGetbooksHandler(t *testing.T, router *gin.Engine, userToken string, expectedCode int, url string) []bookUserGet {
+ req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", userToken))
w := httptest.NewRecorder()
diff --git a/internal/apitest/get_wantread_user_book_test.go b/internal/apitest/get_wantread_user_book_test.go
new file mode 100644
index 0000000..ad802ed
--- /dev/null
+++ b/internal/apitest/get_wantread_user_book_test.go
@@ -0,0 +1,29 @@
+package apitest
+
+import (
+ "testing"
+
+ "git.artlef.fr/PersonalLibraryManager/internal/testutils"
+ "github.com/gin-gonic/gin"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestGetWantReadBooksHandler_Demo(t *testing.T) {
+ router := testutils.TestSetup()
+
+ token := testutils.ConnectDemoUser(router)
+ books := testGetWantReadBooksHandler(t, router, token, 200)
+ assert.Equal(t, 2, len(books))
+}
+
+func TestGetWantReadBooksHandler_Demo2(t *testing.T) {
+ router := testutils.TestSetup()
+
+ token := testutils.ConnectDemo2User(router)
+ books := testGetWantReadBooksHandler(t, router, token, 200)
+ assert.Equal(t, 0, len(books))
+}
+
+func testGetWantReadBooksHandler(t *testing.T, router *gin.Engine, userToken string, expectedCode int) []bookUserGet {
+ return testGetbooksHandler(t, router, userToken, expectedCode, "/mybooks/wantread")
+}
diff --git a/internal/query/query.go b/internal/query/query.go
index 4fcae14..6ff7255 100644
--- a/internal/query/query.go
+++ b/internal/query/query.go
@@ -56,15 +56,29 @@ type BookUserGet struct {
CoverPath string `json:"coverPath"`
}
-func FetchBookUserGet(db *gorm.DB, userId uint) ([]BookUserGet, error) {
+func FetchReadUserBook(db *gorm.DB, userId uint) ([]BookUserGet, error) {
+ query := fetchUserBookGet(db, userId)
+ query = query.Where("user_books.read IS TRUE")
var books []BookUserGet
+ res := query.Find(&books)
+ return books, res.Error
+}
+
+func FetchWantReadUserBook(db *gorm.DB, userId uint) ([]BookUserGet, error) {
+ query := fetchUserBookGet(db, userId)
+ query = query.Where("user_books.want_read IS TRUE")
+ var books []BookUserGet
+ res := query.Find(&books)
+ return books, res.Error
+}
+
+func fetchUserBookGet(db *gorm.DB, userId uint) *gorm.DB {
query := db.Model(&model.UserBook{})
query = query.Select("books.id, books.title, books.author, user_books.rating, user_books.read, user_books.want_read, " + selectStaticFilesPath())
query = query.Joins("left join books on (books.id = user_books.book_id)")
query = query.Joins("left join static_files on (static_files.id = books.cover_id)")
query = query.Where("user_id = ?", userId)
- res := query.Find(&books)
- return books, res.Error
+ return query
}
func selectStaticFilesPath() string {
diff --git a/internal/routes/bookuserget.go b/internal/routes/userbookreadget.go
similarity index 76%
rename from internal/routes/bookuserget.go
rename to internal/routes/userbookreadget.go
index 98132a7..2cb53fc 100644
--- a/internal/routes/bookuserget.go
+++ b/internal/routes/userbookreadget.go
@@ -8,12 +8,12 @@ import (
"git.artlef.fr/PersonalLibraryManager/internal/query"
)
-func GetMyBooksHanderl(ac appcontext.AppContext) {
+func GetMyBooksReadHandler(ac appcontext.AppContext) {
user, err := ac.GetAuthenticatedUser()
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
- userbooks, err := query.FetchBookUserGet(ac.Db, user.ID)
+ userbooks, err := query.FetchReadUserBook(ac.Db, user.ID)
ac.C.JSON(http.StatusOK, userbooks)
}
diff --git a/internal/routes/userbookwantreadget.go b/internal/routes/userbookwantreadget.go
new file mode 100644
index 0000000..439f135
--- /dev/null
+++ b/internal/routes/userbookwantreadget.go
@@ -0,0 +1,19 @@
+package routes
+
+import (
+ "net/http"
+
+ "git.artlef.fr/PersonalLibraryManager/internal/appcontext"
+ "git.artlef.fr/PersonalLibraryManager/internal/myvalidator"
+ "git.artlef.fr/PersonalLibraryManager/internal/query"
+)
+
+func GetMyBooksWantReadHandler(ac appcontext.AppContext) {
+ user, err := ac.GetAuthenticatedUser()
+ if err != nil {
+ myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
+ return
+ }
+ userbooks, err := query.FetchWantReadUserBook(ac.Db, user.ID)
+ ac.C.JSON(http.StatusOK, userbooks)
+}
diff --git a/internal/setup/setup.go b/internal/setup/setup.go
index 85be341..f3e54b2 100644
--- a/internal/setup/setup.go
+++ b/internal/setup/setup.go
@@ -24,8 +24,11 @@ func Setup(config *config.Config) *gin.Engine {
r.Use(middleware.Auth())
r.Static("/bookcover", config.ImageFolderPath)
bundle := i18nresource.InitializeI18n()
- r.GET("/mybooks", func(c *gin.Context) {
- routes.GetMyBooksHanderl(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config})
+ r.GET("/mybooks/read", func(c *gin.Context) {
+ routes.GetMyBooksReadHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config})
+ })
+ r.GET("/mybooks/wantread", func(c *gin.Context) {
+ routes.GetMyBooksWantReadHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config})
})
r.GET("/search/:searchterm", func(c *gin.Context) {
routes.GetSearchBooksHandler(appcontext.AppContext{C: c, Db: db, I18n: bundle, Config: config})