(r *http.Request)
| 309 | } |
| 310 | |
| 311 | func (n *Notes) update(r *http.Request) (database.Note, error) { |
| 312 | vars := mux.Vars(r) |
| 313 | noteUUID := vars["noteUUID"] |
| 314 | |
| 315 | user := context.User(r.Context()) |
| 316 | if user == nil { |
| 317 | return database.Note{}, app.ErrLoginRequired |
| 318 | } |
| 319 | |
| 320 | var params updateNotePayload |
| 321 | err := parseRequestData(r, ¶ms) |
| 322 | if err != nil { |
| 323 | return database.Note{}, errors.Wrap(err, "decoding params") |
| 324 | } |
| 325 | |
| 326 | if err := validateUpdateNotePayload(params); err != nil { |
| 327 | return database.Note{}, err |
| 328 | } |
| 329 | |
| 330 | var note database.Note |
| 331 | if err := n.app.DB.Where("uuid = ? AND user_id = ?", noteUUID, user.ID).First(¬e).Error; err != nil { |
| 332 | return database.Note{}, errors.Wrap(err, "finding note") |
| 333 | } |
| 334 | |
| 335 | tx := n.app.DB.Begin() |
| 336 | |
| 337 | note, err = n.app.UpdateNote(tx, *user, note, &app.UpdateNoteParams{ |
| 338 | BookUUID: params.BookUUID, |
| 339 | Content: params.Content, |
| 340 | }) |
| 341 | if err != nil { |
| 342 | tx.Rollback() |
| 343 | return database.Note{}, errors.Wrap(err, "updating note") |
| 344 | } |
| 345 | |
| 346 | var book database.Book |
| 347 | if err := tx.Where("uuid = ? AND user_id = ?", note.BookUUID, user.ID).First(&book).Error; err != nil { |
| 348 | tx.Rollback() |
| 349 | return database.Note{}, errors.Wrapf(err, "finding book %s to preload", note.BookUUID) |
| 350 | } |
| 351 | |
| 352 | tx.Commit() |
| 353 | |
| 354 | // preload associations |
| 355 | note.User = *user |
| 356 | note.Book = book |
| 357 | |
| 358 | return note, nil |
| 359 | } |
| 360 | |
| 361 | type updateNoteResp struct { |
| 362 | Status int `json:"status"` |
no test coverage detected