From 9c42c7ccbffb5a2ce5cd968c80069b178ce2280f Mon Sep 17 00:00:00 2001 From: lbenedar Date: Wed, 18 Mar 2026 13:37:10 +0300 Subject: [PATCH] ch7.5 --- cmd/api/movies.go | 24 ++++++++++++++++++++++++ cmd/api/routes.go | 2 +- internal/data/movies.go | 21 +++++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/cmd/api/movies.go b/cmd/api/movies.go index dd7cc5c..ec3e2c9 100644 --- a/cmd/api/movies.go +++ b/cmd/api/movies.go @@ -128,3 +128,27 @@ func (app *application) updateMovieHandler(w http.ResponseWriter, r *http.Reques app.serverErrorResponse(w, r, err) } } + +func (app *application) deleteMovieHandler(w http.ResponseWriter, r *http.Request) { + id, err := app.readIDParam(r) + if err != nil { + app.notFoundResponse(w, r) + return + } + + err = app.models.Movies.Delete(id) + if err != nil { + switch { + case errors.Is(err, data.ErrRecordNotFound): + app.notFoundResponse(w, r) + default: + app.serverErrorResponse(w, r, err) + } + return + } + + err = app.writeJSON(w, http.StatusOK, envelope{"message": "movie succesfully deleted"}, nil) + if err != nil { + app.serverErrorResponse(w, r, err) + } +} diff --git a/cmd/api/routes.go b/cmd/api/routes.go index 40121df..eaf9b58 100644 --- a/cmd/api/routes.go +++ b/cmd/api/routes.go @@ -16,6 +16,6 @@ func (app *application) routes() *httprouter.Router { router.HandlerFunc(http.MethodPost, "/v1/movies", app.createMovieHandler) router.HandlerFunc(http.MethodGet, "/v1/movies/:id", app.showMovieHandler) router.HandlerFunc(http.MethodPut, "/v1/movies/:id", app.updateMovieHandler) - + router.HandlerFunc(http.MethodDelete, "/v1/movies/:id", app.deleteMovieHandler) return router } diff --git a/internal/data/movies.go b/internal/data/movies.go index 1630fc5..8129ded 100644 --- a/internal/data/movies.go +++ b/internal/data/movies.go @@ -85,6 +85,27 @@ func (m MovieModel) Update(movie *Movie) error { } func (m MovieModel) Delete(id int64) error { + if id < 1 { + return ErrRecordNotFound + } + + query := ` + DELETE FROM movies + WHERE id = $1` + + result, err := m.DB.Exec(query, id) + if err != nil { + return err + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + return err + } + if rowsAffected == 0 { + return ErrRecordNotFound + } + return nil }