Added start read date

This commit is contained in:
2025-11-20 22:55:26 +01:00
parent 4cbddfb15f
commit 0bfd0dc231
16 changed files with 263 additions and 33 deletions

View File

@@ -3,6 +3,7 @@ package routes
import (
"net/http"
"strconv"
"time"
"git.artlef.fr/PersonalLibraryManager/internal/appcontext"
"git.artlef.fr/PersonalLibraryManager/internal/model"
@@ -32,5 +33,22 @@ func GetBookHandler(ac appcontext.AppContext) {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
err = fixBookGetDateFields(&book)
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
ac.C.JSON(http.StatusOK, book)
}
func fixBookGetDateFields(book *query.BookGet) error {
if book.StartReadDate == "" {
return nil
}
startDate, err := time.Parse(time.RFC3339, book.StartReadDate)
if err != nil {
return err
}
book.StartReadDate = startDate.Format(time.DateOnly)
return nil
}

View File

@@ -4,6 +4,7 @@ import (
"errors"
"net/http"
"strconv"
"time"
"git.artlef.fr/PersonalLibraryManager/internal/appcontext"
"git.artlef.fr/PersonalLibraryManager/internal/model"
@@ -63,6 +64,42 @@ func PutWantReadUserBookHandler(ac appcontext.AppContext) {
ac.C.String(http.StatusOK, "Success")
}
func PutStartReadUserBookHandler(ac appcontext.AppContext) {
data, err := retrieveDataFromContext(ac)
if err != nil {
return
}
bookId := data.BookId
user := data.User
var startDateToParse userbookPutStartRead
err = ac.C.ShouldBindJSON(&startDateToParse)
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
userbook, err := fetchOrCreateUserBook(ac, bookId, &user)
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
//string equal to "null" to unset value
if startDateToParse.StartDate == "null" {
userbook.StartReadDate = nil
} else {
startDate, err := time.Parse(time.DateOnly, startDateToParse.StartDate)
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
userbook.StartReadDate = &startDate
}
ac.Db.Save(&userbook)
ac.C.String(http.StatusOK, "Success")
}
func PutRateUserBookHandler(ac appcontext.AppContext) {
data, err := retrieveDataFromContext(ac)
if err != nil {
@@ -104,6 +141,10 @@ type userbookPutRating struct {
Rating int `json:"rating" binding:"min=0,max=10"`
}
type userbookPutStartRead struct {
StartDate string `json:"startDate" binding:"required"`
}
type apiCallData struct {
BookId uint
User model.User