Delete with rollback

main
Drew Bednar 2 days ago
parent 2936ce2439
commit e8e04a4cdd

@ -159,6 +159,34 @@ func (app *application) updateMovieHandler(w http.ResponseWriter, r *http.Reques
} }
} }
func (app *application) deleteMovieHandler(w http.ResponseWriter, r *http.Request) {
id, err := app.readIDParam(r)
if err != nil {
app.notFoundResponse(w, r)
return
}
// Maybe should be passing a timeout context
_, err = app.models.Movies.Get(r.Context(), id)
if err != nil {
switch {
case errors.Is(err, data.ErrRecordNotFound):
app.notFoundResponse(w, r)
default:
app.serverErrorResponse(w, r, err)
}
return
}
err = app.models.Movies.Delete(r.Context(), id)
if err != nil {
app.serverErrorResponse(w, r, err)
return
}
w.WriteHeader(http.StatusAccepted)
}
func (app *application) healthCheckHandler(w http.ResponseWriter, r *http.Request) { func (app *application) healthCheckHandler(w http.ResponseWriter, r *http.Request) {
// JSON has to be double quoted. FYI you would never really do this // JSON has to be double quoted. FYI you would never really do this
// js := `{"status": "available", "environment": %q, "version": %q}` // js := `{"status": "available", "environment": %q, "version": %q}`

@ -26,6 +26,7 @@ func (app *application) routes() http.Handler {
router.HandlerFunc(http.MethodPost, "/v1/movies", app.createMovieHandler) router.HandlerFunc(http.MethodPost, "/v1/movies", app.createMovieHandler)
router.HandlerFunc(http.MethodGet, "/v1/movies/:id", app.getMovieHandler) router.HandlerFunc(http.MethodGet, "/v1/movies/:id", app.getMovieHandler)
router.HandlerFunc(http.MethodPut, "/v1/movies/:id", app.updateMovieHandler) router.HandlerFunc(http.MethodPut, "/v1/movies/:id", app.updateMovieHandler)
router.HandlerFunc(http.MethodDelete, "/v1/movies/:id", app.deleteMovieHandler)
// middleware // middleware
return app.recoverPanic(router) return app.recoverPanic(router)

@ -99,5 +99,16 @@ func (m MovieModel) Update(ctx context.Context, movie *Movie) error {
} }
func (m MovieModel) Delete(ctx context.Context, id int64) error { func (m MovieModel) Delete(ctx context.Context, id int64) error {
return nil query := `DELETE FROM movies WHERE id = $1`
tx, err := m.pool.BeginTx(ctx, pgx.TxOptions{})
if err != nil {
return err
}
defer func() {
tx.Rollback(ctx)
}()
_, err = tx.Exec(ctx, query, id)
return err
} }

Loading…
Cancel
Save