(r *http.Request)
| 236 | } |
| 237 | |
| 238 | func (b *Books) del(r *http.Request) (database.Book, error) { |
| 239 | user := context.User(r.Context()) |
| 240 | if user == nil { |
| 241 | return database.Book{}, app.ErrLoginRequired |
| 242 | } |
| 243 | |
| 244 | vars := mux.Vars(r) |
| 245 | uuid := vars["bookUUID"] |
| 246 | |
| 247 | if !helpers.ValidateUUID(uuid) { |
| 248 | return database.Book{}, app.ErrInvalidUUID |
| 249 | } |
| 250 | |
| 251 | tx := b.app.DB.Begin() |
| 252 | |
| 253 | var book database.Book |
| 254 | if err := tx.Where("user_id = ? AND uuid = ?", user.ID, uuid).First(&book).Error; err != nil { |
| 255 | tx.Rollback() |
| 256 | return database.Book{}, pkgErrors.Wrap(err, "finding a book") |
| 257 | } |
| 258 | |
| 259 | var notes []database.Note |
| 260 | if err := tx.Where("book_uuid = ? AND NOT deleted", uuid).Order("usn ASC").Find(¬es).Error; err != nil { |
| 261 | tx.Rollback() |
| 262 | return database.Book{}, pkgErrors.Wrap(err, "finding notes for the book") |
| 263 | } |
| 264 | |
| 265 | for _, note := range notes { |
| 266 | if _, err := b.app.DeleteNote(tx, *user, note); err != nil { |
| 267 | tx.Rollback() |
| 268 | return database.Book{}, pkgErrors.Wrap(err, "deleting a note in the book") |
| 269 | } |
| 270 | } |
| 271 | |
| 272 | book, err := b.app.DeleteBook(tx, *user, book) |
| 273 | if err != nil { |
| 274 | tx.Rollback() |
| 275 | return database.Book{}, pkgErrors.Wrap(err, "deleting the book") |
| 276 | } |
| 277 | |
| 278 | tx.Commit() |
| 279 | |
| 280 | return book, nil |
| 281 | } |
| 282 | |
| 283 | // deleteBookResp is the response from create book api |
| 284 | type deleteBookResp struct { |
no test coverage detected