Documentation
¶
Index ¶
- Constants
- type CreateMovieRequest
- type DeleteMovieRequest
- type GetMovieRequest
- type GetMoviesRequest
- type Handler
- func (h *Handler) CreateMovie(c echo.Context) error
- func (h *Handler) DeleteMovieByID(c echo.Context) error
- func (h *Handler) GetMovieByID(c echo.Context) error
- func (h *Handler) GetMovieByIDV2(c echo.Context) error
- func (h *Handler) GetMovies(c echo.Context) error
- func (h *Handler) GetStarsByMovieID(c echo.Context) error
- func (h *Handler) UpdateMovieByID(c echo.Context) error
- type Module
- type Movie
- type MovieCredit
- type MovieCreditInfo
- type MovieCreditV2
- type MovieDetails
- type MovieDetailsV2
- type Repository
- func (r *Repository) CreateMovie(ctx context.Context, movie *MovieDetails) error
- func (r *Repository) DeleteMovieByID(ctx context.Context, movieID int) error
- func (r *Repository) GetMovieByID(ctx context.Context, movieID int) (*MovieDetails, error)
- func (r *Repository) GetMovies(ctx context.Context, offset int, limit int, sort, order string, ...) ([]*Movie, int, error)
- func (r *Repository) Lock(ctx context.Context, tx pgx.Tx, movieID int) error
- func (r *Repository) UpdateMovieByID(ctx context.Context, movieID int, req *UpdateMovieRequest) (*MovieDetails, error)
- type Service
- func (s *Service) CreateMovie(ctx context.Context, movie *MovieDetails) (*MovieDetails, error)
- func (s *Service) DeleteMovieByID(ctx context.Context, movieID int) error
- func (s *Service) GetMovieByID(ctx context.Context, movieID int) (*MovieDetails, error)
- func (s *Service) GetMovieByIDV2(ctx context.Context, movieID int) (*MovieDetailsV2, error)
- func (s *Service) GetMovies(ctx context.Context, offset int, limit int, sort, order string, ...) ([]*Movie, int, error)
- func (s *Service) GetStarsByMovieID(ctx context.Context, movieID int) ([]*stars.Star, error)
- func (s *Service) UpdateMovieByID(ctx context.Context, movieID int, req *UpdateMovieRequest) (*MovieDetails, error)
- type UpdateMovieRequest
Constants ¶
const (
DefaultPosterURL = "https://assets.dryicons.com/uploads/vector/preview/8393/large_1x_movie_countdown.jpg"
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CreateMovieRequest ¶
type CreateMovieRequest struct { Title string `json:"title" validate:"min=1,max=100"` ReleaseDate time.Time `json:"releaseDate" validate:"nonzero"` PosterURL *string `json:"posterUrl,omitempty"` IMDbRating *float64 `json:"imdbRating,omitempty"` IMDbURL *string `json:"imdbUrl,omitempty"` Metascore *int `json:"metascore,omitempty"` MetascoreURL *string `json:"metascoreUrl,omitempty"` Description string `json:"description"` GenreIDs []int `json:"genreIds" validate:"nonzero"` Cast []MovieCreditInfo `json:"cast"` }
type DeleteMovieRequest ¶
type DeleteMovieRequest struct {
MovieID int `json:"-" param:"movieId" validate:"nonzero"`
}
type GetMovieRequest ¶
type GetMovieRequest struct {
MovieID int `json:"-" param:"movieId" validate:"nonzero"`
}
type GetMoviesRequest ¶
type GetMoviesRequest struct { pagination.PaginatedRequestOrdered SearchTerm *string `query:"q"` }
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
func NewHandler ¶
func NewHandler(service *Service, paginationConfig *config.PaginationConfig) *Handler
func (*Handler) CreateMovie ¶
CreateMovie godoc @Summary Create movie @Description Create movie @ID create-movie @Tags movies @Accept json @Produce json @Param request body contracts.CreateMovieRequest true "Movie details" @Success 201 {object} contracts.MovieDetails "Movie created" @Failure 403 {object} apperrors.Error "Insufficient permissions" @Failure 400 {object} apperrors.Error "Invalid request, invalid parameter or missing parameter" @Failure 500 {object} apperrors.Error "Internal server error" @Router /movies [post]
func (*Handler) DeleteMovieByID ¶
DeleteMovieByID godoc @Summary Delete movie by id @Description Delete movie by id @ID delete-movie-by-id @Tags movies @Produce json @Param movieId path int true "Movie ID" @Success 200 "Movie deleted (softly deleting)" @Failure 400 {object} apperrors.Error "Invalid movie id, invalid parameter or missing parameter" @Failure 403 {object} apperrors.Error "Insufficient permissions" @Failure 404 {object} apperrors.Error "Movie not found" @Failure 500 {object} apperrors.Error "Internal server error" @Router /movies/{movieId} [delete]
func (*Handler) GetMovieByID ¶
GetMovieByID godoc @Summary Get movie by id @Description Get movie by id @ID get-movie-by-id @Tags movies @Produce json @Param movieId path int true "Movie ID" @Success 200 {object} contracts.MovieDetails "Movie details" @Failure 400 {object} apperrors.Error "Invalid movie id, invalid parameter or missing parameter" @Failure 404 {object} apperrors.Error "Movie not found" @Failure 500 {object} apperrors.Error "Internal server error" @Router /movies/{movieId} [get]
func (*Handler) GetMovieByIDV2 ¶
GetMovieByIDV2 godoc @Summary Get movie by id @Description Get movie by id @ID get-movie-by-id-v2 @Tags movies @Produce json @Param movieId path int true "Movie ID" @Success 200 {object} contracts.MovieDetailsV2 "Movie details (short version)" @Failure 400 {object} apperrors.Error "Invalid movie id, invalid parameter or missing parameter" @Failure 404 {object} apperrors.Error "Movie not found" @Failure 500 {object} apperrors.Error "Internal server error" @Router /movies/v2/{movieId} [get]
func (*Handler) GetMovies ¶
GetMovies godoc @Summary Get movies @Description Get movies @ID get-movies @Tags movies @Produce json @Param request body contracts.GetMoviesRequest false "Request, if request body empty, default values will be used, if searchTerm in not empty: searching by title or description matches" @Success 200 {object} pagination.PaginatedResponseOrdered[contracts.Movie] "PaginatedResponse of Movies, total number of movies, or nil if none found" @Failure 400 {object} apperrors.Error "Invalid request, invalid parameter or missing parameter" @Failure 500 {object} apperrors.Error "Internal server error" @Router /movies [get]
func (*Handler) GetStarsByMovieID ¶
GetStarsByMovieID godoc @Summary Get stars by movie id @Description Get stars by movie id @ID get-stars-by-movie-id @Tags movies @Produce json @Param movieId path int true "Movie ID" @Success 200 {object} []contracts.Star "Stars for movie" @Failure 400 {object} apperrors.Error "Invalid movie id, invalid parameter or missing parameter" @Failure 404 {object} apperrors.Error "Movie not found" @Failure 500 {object} apperrors.Error "Internal server error" @Router /movies/{movieId}/stars [get]
func (*Handler) UpdateMovieByID ¶
UpdateMovieByID godoc @Summary Update movie by id @Description Update movie by id @ID update-movie-by-id @Tags movies @Accept json @Produce json @Param movieId path int true "Movie ID" @Param request body contracts.UpdateMovieRequest true "Updated movie details, fields that are not provided will not be updated" @Success 200 {object} contracts.MovieDetails "Movie updated" @Failure 400 {object} apperrors.Error "Invalid movie id, invalid parameter or missing parameter" @Failure 403 {object} apperrors.Error "Insufficient permissions" @Failure 404 {object} apperrors.Error "Movie not found" @Failure 500 {object} apperrors.Error "Internal server error" @Router /movies/{movieId} [put]
type Module ¶
type Module struct { Handler *Handler Service *Service Repository *Repository }
type MovieCredit ¶
type MovieCredit struct { Star stars.Star `json:"star"` Role string `json:"role"` HeroName *string `json:"heroName,omitempty"` Details string `json:"details,omitempty"` }
func (*MovieCredit) ConvertToV2 ¶
func (c *MovieCredit) ConvertToV2() *MovieCreditV2
type MovieCreditInfo ¶
type MovieCreditV2 ¶
type MovieDetails ¶
type MovieDetails struct { Movie Description string `json:"description"` IMDbRating *float64 `json:"imdbRating,omitempty"` IMDbURL *string `json:"imdbUrl,omitempty"` Metascore *int `json:"metascore,omitempty"` MetascoreURL *string `json:"metascoreUrl,omitempty"` Version int `json:"version"` Genres []*genres.Genre `json:"genres"` Cast []*MovieCredit `json:"cast"` }
func (*MovieDetails) ConvertToV2 ¶
func (m *MovieDetails) ConvertToV2() *MovieDetailsV2
type MovieDetailsV2 ¶
type MovieDetailsV2 struct { Movie Description string `json:"description"` IMDbRating *float64 `json:"imdbRating,omitempty"` IMDbURL *string `json:"imdbUrl,omitempty"` Metascore *int `json:"metascore,omitempty"` MetascoreURL *string `json:"metascoreUrl,omitempty"` Version int `json:"version"` Genres []*genres.Genre `json:"genres"` Cast []*MovieCreditV2 `json:"cast"` }
type Repository ¶
type Repository struct {
// contains filtered or unexported fields
}
func NewRepository ¶
func NewRepository(db *pgxpool.Pool, genresRepo *genres.Repository, starsRepo *stars.Repository) *Repository
func (*Repository) CreateMovie ¶
func (r *Repository) CreateMovie(ctx context.Context, movie *MovieDetails) error
func (*Repository) DeleteMovieByID ¶
func (r *Repository) DeleteMovieByID(ctx context.Context, movieID int) error
func (*Repository) GetMovieByID ¶
func (r *Repository) GetMovieByID(ctx context.Context, movieID int) (*MovieDetails, error)
func (*Repository) Lock ¶
func (r *Repository) Lock(ctx context.Context, tx pgx.Tx, movieID int) error
func (*Repository) UpdateMovieByID ¶
func (r *Repository) UpdateMovieByID(ctx context.Context, movieID int, req *UpdateMovieRequest) (*MovieDetails, error)
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
func NewService ¶
func NewService(repo *Repository, genresRepo *genres.Repository, starsRepo *stars.Repository) *Service
func (*Service) CreateMovie ¶
func (s *Service) CreateMovie(ctx context.Context, movie *MovieDetails) (*MovieDetails, error)
func (*Service) DeleteMovieByID ¶
func (*Service) GetMovieByID ¶
func (*Service) GetMovieByIDV2 ¶
func (*Service) GetStarsByMovieID ¶
func (*Service) UpdateMovieByID ¶
func (s *Service) UpdateMovieByID(ctx context.Context, movieID int, req *UpdateMovieRequest) (*MovieDetails, error)
type UpdateMovieRequest ¶
type UpdateMovieRequest struct { MovieID int `json:"-" param:"movieId" validate:"nonzero"` Title *string `json:"title,omitempty" validate:"max=100"` ReleaseDate *time.Time `json:"releaseDate,omitempty"` PosterURL *string `json:"posterUrl,omitempty"` IMDbRating *float64 `json:"imdbRating,omitempty"` IMDbURL *string `json:"imdbUrl,omitempty"` Metascore *int `json:"metascore,omitempty"` MetascoreURL *string `json:"metascoreUrl,omitempty"` Description *string `json:"description,omitempty"` Version int `json:"version"` GenreIDs []*int `json:"genreIds,omitempty"` Cast []*MovieCreditInfo `json:"cast,omitempty"` }