This commit is contained in:
lbenedar
2026-03-18 13:04:55 +03:00
parent 9dadd5d256
commit 0a8a1602a6
2 changed files with 41 additions and 9 deletions

View File

@@ -1,9 +1,9 @@
package main package main
import ( import (
"errors"
"fmt" "fmt"
"net/http" "net/http"
"time"
"gitea.local.lab/Lbenedar/greenlight/internal/data" "gitea.local.lab/Lbenedar/greenlight/internal/data"
"gitea.local.lab/Lbenedar/greenlight/internal/validator" "gitea.local.lab/Lbenedar/greenlight/internal/validator"
@@ -58,13 +58,15 @@ func (app *application) showMovieHandler(w http.ResponseWriter, r *http.Request)
return return
} }
movie := data.Movie{ movie, err := app.models.Movies.Get(id)
ID: id, if err != nil {
CreatedAt: time.Now(), switch {
Title: "Casablanca", case errors.Is(err, data.ErrRecordNotFound):
Runtime: 102, app.notFoundResponse(w, r)
Genres: []string{"drama", "romance", "war"}, default:
Version: 1, app.serverErrorResponse(w, r, err)
}
return
} }
err = app.writeJSON(w, http.StatusOK, envelope{"movie": movie}, nil) err = app.writeJSON(w, http.StatusOK, envelope{"movie": movie}, nil)

View File

@@ -2,6 +2,7 @@ package data
import ( import (
"database/sql" "database/sql"
"errors"
"time" "time"
"gitea.local.lab/Lbenedar/greenlight/internal/validator" "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) { 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 { func (m MovieModel) Update(movie *Movie) error {