Exporting the validation from cmd/api/movies.go to internal/data/movies.go by creating the ValidateMovie method. Updating createMovieHandler to use our new ValidateMovie method.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 55s

This commit is contained in:
Maxime Delporte
2025-10-28 12:07:04 +01:00
parent e5ddfa120f
commit 6ef731573b
2 changed files with 33 additions and 20 deletions

View File

@@ -1,6 +1,9 @@
package data
import "time"
import (
"greenlight.craftr.fr/internal/validator"
"time"
)
// Movie
/*
@@ -19,3 +22,22 @@ type Movie struct {
Genres []string `json:"genres,omitempty"`
Version int32 `json:"version"`
}
func ValidateMovie(v *validator.Validator, movie *Movie) {
// Use the Check() method to execute our validation checks. This will add the provided key and error message to the errors maps if the check does not evaluate to true. For example, in the first line we "check that the title is not equal to an empty string".
v.Check(movie.Title != "", "title", "must be provided")
v.Check(len(movie.Title) <= 500, "title", "must not be more than 500 bytes long")
v.Check(movie.Year != 0, "year", "must be provided")
v.Check(movie.Year >= 1888, "year", "must be greater than 1888")
v.Check(movie.Year <= int32(time.Now().Year()), "year", "must not be in the future")
v.Check(movie.Runtime != 0, "runtime", "must be provided")
v.Check(movie.Runtime > 0, "runtime", "must be a positive integer")
v.Check(movie.Genres != nil, "genres", "must be provided")
v.Check(len(movie.Genres) >= 1, "genres", "must contain at least 1 genre")
v.Check(len(movie.Genres) <= 5, "genres", "must not contain more than 5 genres")
// Not that we're using the Unique helper in the line below to check that all values in the input.Genres slice are unique
v.Check(validator.Unique(movie.Genres), "genres", "must not contain duplicate values")
}