Basic list movie functionality

main
Drew Bednar 2 weeks ago
parent 84bdcd8ce6
commit c9da5ba970

@ -242,6 +242,15 @@ func (app *application) deleteMovieHandler(w http.ResponseWriter, r *http.Reques
} }
} }
func (app *application) listMoviesHandler(w http.ResponseWriter, r *http.Request) {
movies, err := app.models.Movies.List(r.Context())
if err != nil {
app.serverErrorResponse(w, r, err)
return
}
app.writeJSON(w, 200, envelope{"movies": movies}, nil)
}
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}`

@ -23,6 +23,7 @@ func (app *application) routes() http.Handler {
router.MethodNotAllowed = http.HandlerFunc(app.methodNotAllowedResponse) router.MethodNotAllowed = http.HandlerFunc(app.methodNotAllowedResponse)
router.HandlerFunc(http.MethodGet, "/v1/healthcheck", app.healthCheckHandler) router.HandlerFunc(http.MethodGet, "/v1/healthcheck", app.healthCheckHandler)
router.HandlerFunc(http.MethodGet, "/v1/movies", app.listMoviesHandler)
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.MethodPatch, "/v1/movies/:id", app.updateMovieHandler) router.HandlerFunc(http.MethodPatch, "/v1/movies/:id", app.updateMovieHandler)

@ -167,3 +167,41 @@ func (m MovieModel) Delete(ctx context.Context, id int64) (err error) {
return nil return nil
} }
func (m MovieModel) List(ctx context.Context) ([]*Movie, error) {
query := `
SELECT id, created_at, title, year, runtime, genres, version
FROM movies
ORDER BY id ASC
`
rows, err := m.pool.Query(ctx, query)
if err != nil {
return nil, err
}
defer rows.Close()
var movies []*Movie
for rows.Next() {
var movie Movie
err := rows.Scan(
&movie.ID,
&movie.CreatedAt,
&movie.Title,
&movie.Year,
&movie.Runtime,
&movie.Genres,
&movie.Version,
)
if err != nil {
return nil, err
}
movies = append(movies, &movie)
}
err = rows.Err()
if err != nil {
return nil, err
}
return movies, nil
}

Loading…
Cancel
Save