diff --git a/cmd/api/movies.go b/cmd/api/movies.go index aa45f7d..d874c99 100644 --- a/cmd/api/movies.go +++ b/cmd/api/movies.go @@ -1,9 +1,9 @@ package main import ( + "errors" "fmt" "net/http" - "time" "gitea.local.lab/Lbenedar/greenlight/internal/data" "gitea.local.lab/Lbenedar/greenlight/internal/validator" @@ -58,13 +58,15 @@ func (app *application) showMovieHandler(w http.ResponseWriter, r *http.Request) return } - movie := data.Movie{ - ID: id, - CreatedAt: time.Now(), - Title: "Casablanca", - Runtime: 102, - Genres: []string{"drama", "romance", "war"}, - Version: 1, + movie, err := app.models.Movies.Get(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{"movie": movie}, nil) diff --git a/internal/data/movies.go b/internal/data/movies.go index 5f3e1d0..577a587 100644 --- a/internal/data/movies.go +++ b/internal/data/movies.go @@ -2,6 +2,7 @@ package data import ( "database/sql" + "errors" "time" "gitea.local.lab/Lbenedar/greenlight/internal/validator" @@ -33,7 +34,36 @@ func (m MovieModel) Insert(movie *Movie) error { } func (m MovieModel) Get(id int64) (*Movie, error) { - return nil, nil + if id < 1 { + return nil, ErrRecordNotFound + } + + query := ` + SELECT id, created_at, title, year, runtime, genres, version + FROM movies + WHERE id = $1` + + var movie Movie + + err := m.DB.QueryRow(query, id).Scan( + &movie.ID, + &movie.CreatedAt, + &movie.Title, + &movie.Year, + &movie.Runtime, + pq.Array(&movie.Genres), + &movie.Version, + ) + + if err != nil { + switch { + case errors.Is(err, sql.ErrNoRows): + return nil, ErrRecordNotFound + default: + return nil, err + } + } + return &movie, nil } func (m MovieModel) Update(movie *Movie) error {