mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
d55bb34766
Former-commit-id: f73cbf6010595c639f6c5b5119e2ec41bc9802a5
66 lines
2.0 KiB
Go
66 lines
2.0 KiB
Go
// file: services/movie_service.go
|
|
|
|
package services
|
|
|
|
import (
|
|
"github.com/kataras/iris/v12/_examples/mvc/repository/datamodels"
|
|
"github.com/kataras/iris/v12/_examples/mvc/repository/repositories"
|
|
)
|
|
|
|
// MovieService handles some of the CRUID operations of the movie datamodel.
|
|
// It depends on a movie repository for its actions.
|
|
// It's here to decouple the data source from the higher level compoments.
|
|
// As a result a different repository type can be used with the same logic without any aditional changes.
|
|
// It's an interface and it's used as interface everywhere
|
|
// because we may need to change or try an experimental different domain logic at the future.
|
|
type MovieService interface {
|
|
GetAll() []datamodels.Movie
|
|
GetByID(id int64) (datamodels.Movie, bool)
|
|
DeleteByID(id int64) bool
|
|
UpdatePosterAndGenreByID(id int64, poster string, genre string) (datamodels.Movie, error)
|
|
}
|
|
|
|
// NewMovieService returns the default movie service.
|
|
func NewMovieService(repo repositories.MovieRepository) MovieService {
|
|
return &movieService{
|
|
repo: repo,
|
|
}
|
|
}
|
|
|
|
type movieService struct {
|
|
repo repositories.MovieRepository
|
|
}
|
|
|
|
// GetAll returns all movies.
|
|
func (s *movieService) GetAll() []datamodels.Movie {
|
|
return s.repo.SelectMany(func(_ datamodels.Movie) bool {
|
|
return true
|
|
}, -1)
|
|
}
|
|
|
|
// GetByID returns a movie based on its id.
|
|
func (s *movieService) GetByID(id int64) (datamodels.Movie, bool) {
|
|
return s.repo.Select(func(m datamodels.Movie) bool {
|
|
return m.ID == id
|
|
})
|
|
}
|
|
|
|
// UpdatePosterAndGenreByID updates a movie's poster and genre.
|
|
func (s *movieService) UpdatePosterAndGenreByID(id int64, poster string, genre string) (datamodels.Movie, error) {
|
|
// update the movie and return it.
|
|
return s.repo.InsertOrUpdate(datamodels.Movie{
|
|
ID: id,
|
|
Poster: poster,
|
|
Genre: genre,
|
|
})
|
|
}
|
|
|
|
// DeleteByID deletes a movie by its id.
|
|
//
|
|
// Returns true if deleted otherwise false.
|
|
func (s *movieService) DeleteByID(id int64) bool {
|
|
return s.repo.Delete(func(m datamodels.Movie) bool {
|
|
return m.ID == id
|
|
}, 1)
|
|
}
|