From 3d8b98482c72f102b746685a04b334c0f227b803 Mon Sep 17 00:00:00 2001 From: Lucas BEE Date: Wed, 31 Jul 2019 13:34:27 +0000 Subject: [PATCH] Add handlers to merge wishlist by polochon Update polochon package --- backend/polochons/handlers.go | 99 +++++++++++++++++++++++++++++++++++ backend/routes.go | 2 + go.mod | 12 ++--- go.sum | 27 +++------- 4 files changed, 110 insertions(+), 30 deletions(-) diff --git a/backend/polochons/handlers.go b/backend/polochons/handlers.go index 7537726..16b2ea0 100644 --- a/backend/polochons/handlers.go +++ b/backend/polochons/handlers.go @@ -9,6 +9,7 @@ import ( "git.quimbo.fr/odwrtw/canape/backend/models" "git.quimbo.fr/odwrtw/canape/backend/web" "github.com/gorilla/mux" + polochon "github.com/odwrtw/polochon/lib" "github.com/sirupsen/logrus" ) @@ -241,3 +242,101 @@ func DeletePolochonHandler(env *web.Env, w http.ResponseWriter, r *http.Request) return env.RenderOK(w, "Polochon deleted") } + +// GetMovieWishlistHandler returns the movie wishlist of all of the polochon's +// users combined +func GetMovieWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { + log := env.Log.WithFields(logrus.Fields{ + "function": "polochons.GetMovieWishlistHandler", + }) + log.Debugf("getting polochon movie wishlist") + + p, err := getPolochon(env, r) + if err != nil { + return env.RenderError(w, err) + } + + // Get the polochon's users + users, err := models.GetPolochonUsers(env.Database, p.ID) + if err != nil { + return env.RenderError(w, err) + } + + wishlist := polochon.Wishlist{} + for _, u := range users { + // Get the user's wishlisted movies + moviesWishlist, err := models.GetMovieWishlist(env.Database, u.ID) + if err != nil { + return env.RenderError(w, err) + } + + // Add the movie to the wishlist + for _, imdbID := range moviesWishlist.List() { + wishlist.AddMovie(&polochon.WishedMovie{ + ImdbID: imdbID, + }) + } + } + + return env.RenderJSON(w, wishlist.Movies) +} + +// GetShowWishlistHandler returns the show wishlist of all of the polochon's +// users combined +func GetShowWishlistHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { + log := env.Log.WithFields(logrus.Fields{ + "function": "polochons.GetShowWishlistHandler", + }) + log.Debugf("getting polochon show wishlist") + + p, err := getPolochon(env, r) + if err != nil { + return env.RenderError(w, err) + } + + // Get the polochon's users + users, err := models.GetPolochonUsers(env.Database, p.ID) + if err != nil { + return env.RenderError(w, err) + } + + wishlist := polochon.Wishlist{} + for _, u := range users { + // Get the user's wishlisted shows + moviesWishlist, err := models.GetShowWishlist(env.Database, u.ID) + if err != nil { + return env.RenderError(w, err) + } + + // Add the show to the wishlist + for _, show := range moviesWishlist.List() { + wishlist.AddShow(&polochon.WishedShow{ + ImdbID: show.ImdbID, + Season: show.Season, + Episode: show.Episode, + }) + } + } + + return env.RenderJSON(w, wishlist.Shows) +} + +// Small helper to retrieve and check the polochon's credentials +// TODO: Put this code in a middleware +func getPolochon(env *web.Env, r *http.Request) (*models.Polochon, error) { + vars := mux.Vars(r) + id := vars["id"] + token := r.URL.Query().Get("token") + + // Get the polochon associated + p, err := models.GetPolochonByID(env.Database, id) + if err != nil { + return nil, err + } + + // Check the auth + if token != p.AuthToken { + return nil, fmt.Errorf("Forbidden") + } + return p, nil +} diff --git a/backend/routes.go b/backend/routes.go index 4f802d6..320d874 100644 --- a/backend/routes.go +++ b/backend/routes.go @@ -31,6 +31,8 @@ func setupRoutes(env *web.Env) { env.Handle("/polochons", polochons.NewPolochonHandler).WithRole(models.UserRole).Methods("POST") env.Handle("/polochons/{id}", polochons.EditPolochonHandler).WithRole(models.UserRole).Methods("POST") env.Handle("/polochons/{id}", polochons.DeletePolochonHandler).WithRole(models.UserRole).Methods("DELETE") + env.Handle("/polochons/{id}/wishlist/movies", polochons.GetMovieWishlistHandler).Methods("GET") + env.Handle("/polochons/{id}/wishlist/shows", polochons.GetShowWishlistHandler).Methods("GET") env.Handle("/polochons/{id}/users/{user_id}", polochons.PolochonUserHandler).WithRole(models.UserRole).Methods("POST") // Movies routes diff --git a/go.mod b/go.mod index 384818b..fe4ea6f 100644 --- a/go.mod +++ b/go.mod @@ -11,27 +11,21 @@ require ( github.com/gregdel/srt2vtt v0.0.0-20170314031115-46562d19ab2d github.com/jmoiron/sqlx v1.2.0 github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181 // indirect - github.com/kr/pretty v0.1.0 - github.com/kr/pty v1.1.8 // indirect github.com/lib/pq v1.1.1 - github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e // indirect github.com/mattn/go-sqlite3 v1.10.0 // indirect - github.com/meatballhat/negroni-logrus v0.0.0-20170801195057-31067281800f github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/odwrtw/papi v0.0.0-20190511132159-936937ad8b6a - github.com/odwrtw/polochon v0.0.0-20190723115006-27d67e2a6eed + github.com/odwrtw/polochon v0.0.0-20190731125514-e70ae41d041b github.com/phyber/negroni-gzip v0.0.0-20180113114010-ef6356a5d029 github.com/pioz/tvdb v0.0.0-20190503215423-f45c687faba9 // indirect github.com/robfig/cron v1.1.0 github.com/sirupsen/logrus v1.4.2 - github.com/stretchr/objx v0.2.0 // indirect github.com/unrolled/render v1.0.0 github.com/urfave/negroni v1.0.0 golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 - golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect - golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 // indirect + golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 // indirect + golang.org/x/sys v0.0.0-20190730183949-1393eb018365 // indirect golang.org/x/text v0.3.2 // indirect - golang.org/x/tools v0.0.0-20190723021737-8bb11ff117ca // indirect google.golang.org/appengine v1.5.0 // indirect gopkg.in/yaml.v2 v2.2.2 ) diff --git a/go.sum b/go.sum index 10afb30..f103b77 100644 --- a/go.sum +++ b/go.sum @@ -4,7 +4,6 @@ github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRy github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -50,7 +49,6 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxv github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28 h1:mkl3tvPHIuPaWsLtmHTybJeoVEW7cbePK73Ir8VtruA= @@ -59,7 +57,6 @@ github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mailru/easyjson v0.0.0-20180730094502-03f2033d19d5/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= @@ -86,10 +83,8 @@ github.com/odwrtw/papi v0.0.0-20190413103029-bd5bfea85ae6 h1:bF8XKFfYNY4quRdqJ5E github.com/odwrtw/papi v0.0.0-20190413103029-bd5bfea85ae6/go.mod h1:CXotdtODLpW0/yuFV5XH8Rmrj0eAfPLvdMKykPM2WCk= github.com/odwrtw/papi v0.0.0-20190511132159-936937ad8b6a h1:9mdPet/ianrckPWR2jSekoafz6BaqbF7kPXLnDEIKu8= github.com/odwrtw/papi v0.0.0-20190511132159-936937ad8b6a/go.mod h1:eY0skvVHJBwbSJ18uq2c1T4SvhdEV8R0XFSb0zKh5Yo= -github.com/odwrtw/polochon v0.0.0-20190510120140-0141d4124793 h1:WYAakw7mYVYFmHAyg5VvXUOcjP9grGg2vuzVW+OLWU8= -github.com/odwrtw/polochon v0.0.0-20190510120140-0141d4124793/go.mod h1:3PMLSrnwoYdYVdSwrEybBM5pNmc9Ye6pNwsOZXsL7vA= -github.com/odwrtw/polochon v0.0.0-20190723115006-27d67e2a6eed h1:UZ48Z6EIr1XYHD3O1+bdRHI82tyjEM2UEj+mzEfQ0Us= -github.com/odwrtw/polochon v0.0.0-20190723115006-27d67e2a6eed/go.mod h1:8tBt6OpWJvdNdbWWGNFc0kr+EQPCB9fjUDiUDQwDmsk= +github.com/odwrtw/polochon v0.0.0-20190731125514-e70ae41d041b h1:z/BR9+CkUKv5js93jVXBj9YvOzcL85LLHoM2kQgAGkg= +github.com/odwrtw/polochon v0.0.0-20190731125514-e70ae41d041b/go.mod h1:8tBt6OpWJvdNdbWWGNFc0kr+EQPCB9fjUDiUDQwDmsk= github.com/odwrtw/tpb v0.0.0-20170818120756-81ec7762d913 h1:/2IikvMl2A1lH5Y92mJdoCtxTr0eAMxFKCjBqGkYo7s= github.com/odwrtw/tpb v0.0.0-20170818120756-81ec7762d913/go.mod h1:t+vbFbXRhJ+Rc8CJS6YHBtwNnEto8BjIXbp0NzZujow= github.com/odwrtw/trakttv v0.0.0-20170418094324-76889e438555 h1:5JfY2cKMq0g+IpgAaY+6EPRZZK8eV2lgRIUsqPB+hBY= @@ -120,7 +115,6 @@ github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -129,8 +123,6 @@ github.com/unrolled/render v1.0.0/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12q github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 h1:iMGN4xG0cnqj3t+zOM8wUB0BiPKHEwSxEZCvzcbZuvk= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -139,28 +131,21 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190415214537-1da14a5a36f2 h1:iC0Y6EDq+rhnAePxGvJs2kzUAYcwESqdcGRPzEUfzTU= golang.org/x/net v0.0.0-20190415214537-1da14a5a36f2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5 h1:6M3SDHlHHDCx2PcQw3S4KsR170vGqDhJDOmpVd4Hjak= -golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190418150532-d20716ef9d2f h1:6ykJkwjJzBtIc3ZXB8CbvG8k6DEUL8XRZajnrBjtS0g= golang.org/x/sys v0.0.0-20190418150532-d20716ef9d2f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862 h1:rM0ROo5vb9AdYJi1110yjWGMej9ITfKddS89P3Fkhug= -golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 h1:LepdCS8Gf/MVejFIt8lsiexZATdoGVyp5bcyS+rYoUI= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190730183949-1393eb018365 h1:SaXEMXhWzMJThc05vu6uh61Q245r4KaWMrsTedk0FDc= +golang.org/x/sys v0.0.0-20190730183949-1393eb018365/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190723021737-8bb11ff117ca/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=