feat: mark book as read

This commit is contained in:
2025-10-22 14:34:08 +02:00
parent c4ca073b4a
commit 517765114d
10 changed files with 94 additions and 34 deletions

View File

@@ -1,19 +1,21 @@
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 userBookPostCreate struct {
type bookPostMarkAsRead struct {
BookID uint `json:"bookId" binding:"required"`
}
func PostUserBookHandler(ac appcontext.AppContext) {
var userbook userBookPostCreate
func PostBookReadHandler(ac appcontext.AppContext) {
var userbook bookPostMarkAsRead
err := ac.C.ShouldBindJSON(&userbook)
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
@@ -29,18 +31,33 @@ func PostUserBookHandler(ac appcontext.AppContext) {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
userbookDb := userBookWsToDb(userbook, &user)
err = ac.Db.Save(&userbookDb).Error
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 {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
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 userBookPostCreate, user *model.User) model.UserBook {
func userBookWsToDb(ub bookPostMarkAsRead, user *model.User) model.UserBook {
return model.UserBook{
UserID: user.ID,
BookID: ub.BookID,
Read: true,
}
}

View File

@@ -12,6 +12,7 @@ type bookUserGet struct {
Title string `json:"title" binding:"required,max=300"`
Author string `json:"author" binding:"max=100"`
Rating int `json:"rating" binding:"min=0,max=10"`
Read bool `json:"read" binding:"boolean"`
}
func GetMyBooksHanderl(ac appcontext.AppContext) {
@@ -34,5 +35,6 @@ func userBookDbToWs(b *model.UserBook) bookUserGet {
Title: b.Book.Title,
Author: b.Book.Author,
Rating: b.Rating,
Read: b.Read,
}
}