Add routes to show explorer's options

This commit is contained in:
Lucas BEE 2017-03-22 10:03:26 +00:00
parent 7f7da8d097
commit f042987d10
4 changed files with 74 additions and 1 deletions

View File

@ -15,7 +15,12 @@ const (
DO UPDATE SET type=:type, source=:source, category=:category, ids=:ids
RETURNING id;`
getExternalMediaQuery = `SELECT * FROM external_medias WHERE type=$1 AND source=$2 AND category=$3 LIMIT 1;`
getExternalMediaQuery = `SELECT * FROM external_medias WHERE type=$1 AND source=$2 AND category=$3 LIMIT 1;`
getExternalMediaOptions = `
SELECT
source, category
FROM external_medias
WHERE type=$1;`
)
// Media represents an external media
@ -46,3 +51,21 @@ func (m *Media) Upsert(db *sqlx.DB) error {
defer r.Close()
return nil
}
func GetMediaOptions(db *sqlx.DB, mtype string) (map[string][]string, error) {
type mediaAvailable struct {
Source string `db:"source"`
Category string `db:"category"`
}
m := []*mediaAvailable{}
if err := db.Select(&m, getExternalMediaOptions, mtype); err != nil {
return nil, err
}
availableMedia := map[string][]string{}
for _, p := range m {
availableMedia[p.Source] = append(availableMedia[p.Source], p.Category)
}
return availableMedia, nil
}

View File

@ -185,3 +185,29 @@ func Refresh(env *web.Env) {
RefreshMovies(env)
env.Log.Debugf("done refreshing movies")
}
// GetShowOptions will get show explorer options available
func GetShowOptions(env *web.Env) (map[string][]string, error) {
log := env.Log.WithFields(logrus.Fields{
"function": "extmedias.GetShowOptions",
})
log.Debugf("getting explorer show options")
e, err := backend.GetMediaOptions(env.Database, "show")
if err != nil {
return nil, err
}
return e, nil
}
// GetMovieOptions will get movie explorer options available
func GetMovieOptions(env *web.Env) (map[string][]string, error) {
log := env.Log.WithFields(logrus.Fields{
"function": "extmedias.GetMovieOptions",
})
log.Debugf("getting explorer movie options")
e, err := backend.GetMediaOptions(env.Database, "movie")
if err != nil {
return nil, err
}
return e, nil
}

View File

@ -227,3 +227,25 @@ func ExploreShows(env *web.Env, w http.ResponseWriter, r *http.Request) error {
return env.RenderJSON(w, shows)
}
// MovieExplorerOptions will return all the explore movie options available
func MovieExplorerOptions(env *web.Env, w http.ResponseWriter, r *http.Request) error {
// Get the list of movie explorer options available
movieOptions, err := GetMovieOptions(env)
if err != nil {
return env.RenderError(w, err)
}
return env.RenderJSON(w, movieOptions)
}
// ShowExplorerOptions will return all the explore show options available
func ShowExplorerOptions(env *web.Env, w http.ResponseWriter, r *http.Request) error {
// Get the list of show explorer options available
showOptions, err := GetShowOptions(env)
if err != nil {
return env.RenderError(w, err)
}
return env.RenderJSON(w, showOptions)
}

View File

@ -19,6 +19,7 @@ func setupRoutes(env *web.Env) {
// Movies routes
env.Handle("/movies/polochon", movies.PolochonMoviesHandler).WithRole(users.UserRole).Methods("GET")
env.Handle("/movies/explore", extmedias.ExploreMovies).WithRole(users.UserRole).Methods("GET")
env.Handle("/movies/explore/options", extmedias.MovieExplorerOptions).WithRole(users.UserRole).Methods("GET")
env.Handle("/movies/search", movies.SearchMovie).WithRole(users.UserRole).Methods("POST")
env.Handle("/movies/{id:tt[0-9]+}", movies.PolochonDeleteHandler).WithRole(users.AdminRole).Methods("DELETE")
env.Handle("/movies/{id:tt[0-9]+}/refresh", movies.RefreshMovieHandler).WithRole(users.UserRole).Methods("POST")
@ -27,6 +28,7 @@ func setupRoutes(env *web.Env) {
// Shows routes
env.Handle("/shows/polochon", shows.PolochonShowsHandler).WithRole(users.UserRole).Methods("GET")
env.Handle("/shows/explore", extmedias.ExploreShows).WithRole(users.UserRole).Methods("GET")
env.Handle("/shows/explore/options", extmedias.ShowExplorerOptions).WithRole(users.UserRole).Methods("GET")
env.Handle("/shows/search", shows.SearchShow).WithRole(users.UserRole).Methods("POST")
env.Handle("/shows/{id:tt[0-9]+}", shows.GetDetailsHandler).WithRole(users.UserRole).Methods("GET")
env.Handle("/shows/{id:tt[0-9]+}/refresh", shows.RefreshShowHandler).WithRole(users.UserRole).Methods("POST")