diff --git a/cmd/api/movies.go b/cmd/api/movies.go index fae67b6..aa45f7d 100644 --- a/cmd/api/movies.go +++ b/cmd/api/movies.go @@ -36,7 +36,19 @@ func (app *application) createMovieHandler(w http.ResponseWriter, r *http.Reques return } - fmt.Fprintf(w, "%+v\n", input) + err = app.models.Movies.Insert(movie) + if err != nil { + app.serverErrorResponse(w, r, err) + return + } + + headers := make(http.Header) + headers.Set("Location", fmt.Sprintf("/v1/movies/%d", movie.ID)) + + err = app.writeJSON(w, http.StatusCreated, envelope{"movie": movie}, headers) + if err != nil { + app.serverErrorResponse(w, r, err) + } } func (app *application) showMovieHandler(w http.ResponseWriter, r *http.Request) { diff --git a/internal/data/movies.go b/internal/data/movies.go index 1680787..5f3e1d0 100644 --- a/internal/data/movies.go +++ b/internal/data/movies.go @@ -5,6 +5,7 @@ import ( "time" "gitea.local.lab/Lbenedar/greenlight/internal/validator" + "github.com/lib/pq" ) type MovieModel struct { @@ -22,7 +23,13 @@ type Movie struct { } func (m MovieModel) Insert(movie *Movie) error { - return nil + query := ` + INSERT INTO movies (title, year, runtime, genres) + VALUES ($1, $2, $3, $4) + RETURNING id, created_at, version` + + args := []any{movie.Title, movie.Year, movie.Runtime, pq.Array(movie.Genres)} + return m.DB.QueryRow(query, args...).Scan(&movie.ID, &movie.CreatedAt, &movie.Version) } func (m MovieModel) Get(id int64) (*Movie, error) {