package routes import ( "net/http" "git.artlef.fr/PersonalLibraryManager/internal/appcontext" "git.artlef.fr/PersonalLibraryManager/internal/model" "git.artlef.fr/PersonalLibraryManager/internal/myvalidator" ) type userBookPostCreate struct { BookID uint `json:"bookId" binding:"required"` } func PostUserBookHandler(ac appcontext.AppContext) { var userbook userBookPostCreate err := ac.C.ShouldBindJSON(&userbook) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return } err = myvalidator.ValidateId(ac.Db, userbook.BookID, &model.Book{}) if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return } user, fetchUserErr := ac.GetAuthenticatedUser() if fetchUserErr != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return } userbookDb := userBookWsToDb(userbook, &user) err = ac.Db.Save(&userbookDb).Error if err != nil { myvalidator.ReturnErrorsAsJsonResponse(&ac, err) return } ac.C.String(http.StatusOK, "Success") } func userBookWsToDb(ub userBookPostCreate, user *model.User) model.UserBook { return model.UserBook{ UserID: user.ID, BookID: ub.BookID, } }