movies

package
v0.0.0-...-63997f1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 7, 2024 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
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

func (h *Handler) CreateMovie(c echo.Context) error

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

func (h *Handler) DeleteMovieByID(c echo.Context) error

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

func (h *Handler) GetMovieByID(c echo.Context) error

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

func (h *Handler) GetMovieByIDV2(c echo.Context) error

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

func (h *Handler) GetMovies(c echo.Context) error

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

func (h *Handler) GetStarsByMovieID(c echo.Context) error

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

func (h *Handler) UpdateMovieByID(c echo.Context) error

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
}

func NewModule

func NewModule(db *pgxpool.Pool, genresModule *genres.Module, starsModule *stars.Module, paginationConfig config.PaginationConfig) *Module

type Movie

type Movie struct {
	ID          int        `json:"id"`
	Title       string     `json:"title"`
	PosterURL   string     `json:"posterUrl"`
	ReleaseDate time.Time  `json:"releaseDate"`
	AvgRating   *float64   `json:"avgRating,omitempty"`
	CreatedAt   time.Time  `json:"createdAt"`
	DeletedAt   *time.Time `json:"deletedAt,omitempty"`
}

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 MovieCreditInfo struct {
	StarID   int     `json:"starId"`
	Role     string  `json:"role"`
	HeroName *string `json:"heroName,omitempty"`
	Details  string  `json:"details,omitempty"`
}

type MovieCreditV2

type MovieCreditV2 struct {
	Star     *starsv2.StarV2 `json:"star"`
	HeroName *string         `json:"heroName,omitempty"`
	Role     string          `json:"role"`
	Details  string          `json:"details,omitempty"`
}

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) GetMovies

func (r *Repository) GetMovies(ctx context.Context, offset int, limit int, sort, order string, searchTerm *string) ([]*Movie, int, 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 (s *Service) DeleteMovieByID(ctx context.Context, movieID int) error

func (*Service) GetMovieByID

func (s *Service) GetMovieByID(ctx context.Context, movieID int) (*MovieDetails, error)

func (*Service) GetMovieByIDV2

func (s *Service) GetMovieByIDV2(ctx context.Context, movieID int) (*MovieDetailsV2, error)

func (*Service) GetMovies

func (s *Service) GetMovies(ctx context.Context, offset int, limit int, sort, order string, searchTerm *string) ([]*Movie, int, error)

func (*Service) GetStarsByMovieID

func (s *Service) GetStarsByMovieID(ctx context.Context, movieID int) ([]*stars.Star, error)

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"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL