From 9077500b947c83392a070f84087b51a4f14eb8f6 Mon Sep 17 00:00:00 2001 From: Rohan Sreerama Date: Mon, 14 Sep 2020 22:05:56 -0700 Subject: [PATCH 1/3] feat(notifications_service): adds endpoint to list registered devices of a user --- gateway/services/notifications.go | 13 +++++++++- .../notifications/controller/controller.go | 24 +++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/gateway/services/notifications.go b/gateway/services/notifications.go index 710e803a..71dcce04 100644 --- a/gateway/services/notifications.go +++ b/gateway/services/notifications.go @@ -5,14 +5,21 @@ import ( "github.com/HackIllinois/api/gateway/middleware" "github.com/HackIllinois/api/gateway/models" + "net/http" + "github.com/arbor-dev/arbor" "github.com/justinas/alice" - "net/http" ) const NotificationsFormat string = "JSON" var NotificationsRoutes = arbor.RouteCollection{ + arbor.Route{ + "GetAllRegisteredDevices", + "GET", + "/notifications/devices", + alice.New(middleware.IdentificationMiddleware, middleware.AuthMiddleware([]models.Role{models.UserRole})).ThenFunc(GetRegisteredDevices).ServeHTTP, + }, arbor.Route{ "GetAllTopics", "GET", @@ -81,6 +88,10 @@ var NotificationsRoutes = arbor.RouteCollection{ }, } +func GetRegisteredDevices(w http.ResponseWriter, r *http.Request) { + arbor.GET(w, config.NOTIFICATIONS_SERVICE+r.URL.String(), NotificationsFormat, "", r) +} + func GetAllTopics(w http.ResponseWriter, r *http.Request) { arbor.GET(w, config.NOTIFICATIONS_SERVICE+r.URL.String(), NotificationsFormat, "", r) } diff --git a/services/notifications/controller/controller.go b/services/notifications/controller/controller.go index 0fa72150..695a1916 100644 --- a/services/notifications/controller/controller.go +++ b/services/notifications/controller/controller.go @@ -2,13 +2,14 @@ package controller import ( "encoding/json" + "net/http" + "time" + "github.com/HackIllinois/api/common/errors" "github.com/HackIllinois/api/common/utils" "github.com/HackIllinois/api/services/notifications/models" "github.com/HackIllinois/api/services/notifications/service" "github.com/gorilla/mux" - "net/http" - "time" ) func SetupController(route *mux.Route) { @@ -27,6 +28,25 @@ func SetupController(route *mux.Route) { router.HandleFunc("/order/{id}/", GetNotificationOrder).Methods("GET") } +/* + Returns all stats : topics subscribed to, devices registered, past notifications sent +*/ +func GetRegisteredDevices(w http.ResponseWriter, r *http.Request) { + id := r.Header.Get("HackIllinois-Identity") + devices, err := service.GetUserDevices(id) + + if err != nil { + errors.WriteError(w, r, errors.DatabaseError(err.Error(), "Could not retrieve notifications.")) + return + } + + device_list := models.DeviceList{ + Devices: devices, + } + + json.NewEncoder(w).Encode(device_list) +} + /* Returns all topics that notifications can be published to */ From acda9772eedad8b4348032e5e2fb8168761fe438 Mon Sep 17 00:00:00 2001 From: Rohan Sreerama Date: Tue, 15 Sep 2020 01:15:57 -0700 Subject: [PATCH 2/3] feat(notification_service): added endpoint to list all topics user is subscribed to --- gateway/services/notifications.go | 10 +++++++++ .../notifications/controller/controller.go | 21 ++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/gateway/services/notifications.go b/gateway/services/notifications.go index 71dcce04..6aea3179 100644 --- a/gateway/services/notifications.go +++ b/gateway/services/notifications.go @@ -14,6 +14,12 @@ import ( const NotificationsFormat string = "JSON" var NotificationsRoutes = arbor.RouteCollection{ + arbor.Route{ + "GetAllSubscriptions", + "GET", + "/notifications/subscriptions", + alice.New(middleware.IdentificationMiddleware, middleware.AuthMiddleware([]models.Role{models.UserRole})).ThenFunc(GetAllSubscriptions).ServeHTTP, + }, arbor.Route{ "GetAllRegisteredDevices", "GET", @@ -88,6 +94,10 @@ var NotificationsRoutes = arbor.RouteCollection{ }, } +func GetAllSubscriptions(w http.ResponseWriter, r *http.Request) { + arbor.GET(w, config.NOTIFICATIONS_SERVICE+r.URL.String(), NotificationsFormat, "", r) +} + func GetRegisteredDevices(w http.ResponseWriter, r *http.Request) { arbor.GET(w, config.NOTIFICATIONS_SERVICE+r.URL.String(), NotificationsFormat, "", r) } diff --git a/services/notifications/controller/controller.go b/services/notifications/controller/controller.go index 695a1916..a0d74017 100644 --- a/services/notifications/controller/controller.go +++ b/services/notifications/controller/controller.go @@ -29,7 +29,26 @@ func SetupController(route *mux.Route) { } /* - Returns all stats : topics subscribed to, devices registered, past notifications sent + Returns all topics a user is subscribed to +*/ +func GetAllSubscriptions(w http.ResponseWriter, r *http.Request) { + id := r.Header.Get("HackIllinois-Identity") + topics, err := service.GetSubscriptions(id) + + if err != nil { + errors.WriteError(w, r, errors.DatabaseError(err.Error(), "Could not retrieve notifications.")) + return + } + + topic_list := models.TopicList{ + Topics: topics, + } + + json.NewEncoder(w).Encode(topic_list) +} + +/* + Returns devices registered of a specific user */ func GetRegisteredDevices(w http.ResponseWriter, r *http.Request) { id := r.Header.Get("HackIllinois-Identity") From 94ea40253e8149c70497bdfd60f05703d391911d Mon Sep 17 00:00:00 2001 From: Rohan Sreerama Date: Fri, 18 Sep 2020 15:33:37 -0700 Subject: [PATCH 3/3] chore(notifications_service): fixed naming issues and error messages --- gateway/services/notifications.go | 16 ++++++++-------- services/notifications/controller/controller.go | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/gateway/services/notifications.go b/gateway/services/notifications.go index 6aea3179..5dbee3de 100644 --- a/gateway/services/notifications.go +++ b/gateway/services/notifications.go @@ -15,16 +15,16 @@ const NotificationsFormat string = "JSON" var NotificationsRoutes = arbor.RouteCollection{ arbor.Route{ - "GetAllSubscriptions", + "GetUserSubscriptions", "GET", - "/notifications/subscriptions", - alice.New(middleware.IdentificationMiddleware, middleware.AuthMiddleware([]models.Role{models.UserRole})).ThenFunc(GetAllSubscriptions).ServeHTTP, + "/notifications/subscriptions/", + alice.New(middleware.IdentificationMiddleware, middleware.AuthMiddleware([]models.Role{models.UserRole})).ThenFunc(GetUserSubscriptions).ServeHTTP, }, arbor.Route{ - "GetAllRegisteredDevices", + "GetUserRegisteredDevices", "GET", - "/notifications/devices", - alice.New(middleware.IdentificationMiddleware, middleware.AuthMiddleware([]models.Role{models.UserRole})).ThenFunc(GetRegisteredDevices).ServeHTTP, + "/notifications/devices/", + alice.New(middleware.IdentificationMiddleware, middleware.AuthMiddleware([]models.Role{models.UserRole})).ThenFunc(GetUserRegisteredDevices).ServeHTTP, }, arbor.Route{ "GetAllTopics", @@ -94,11 +94,11 @@ var NotificationsRoutes = arbor.RouteCollection{ }, } -func GetAllSubscriptions(w http.ResponseWriter, r *http.Request) { +func GetUserSubscriptions(w http.ResponseWriter, r *http.Request) { arbor.GET(w, config.NOTIFICATIONS_SERVICE+r.URL.String(), NotificationsFormat, "", r) } -func GetRegisteredDevices(w http.ResponseWriter, r *http.Request) { +func GetUserRegisteredDevices(w http.ResponseWriter, r *http.Request) { arbor.GET(w, config.NOTIFICATIONS_SERVICE+r.URL.String(), NotificationsFormat, "", r) } diff --git a/services/notifications/controller/controller.go b/services/notifications/controller/controller.go index a0d74017..410e87e8 100644 --- a/services/notifications/controller/controller.go +++ b/services/notifications/controller/controller.go @@ -31,12 +31,12 @@ func SetupController(route *mux.Route) { /* Returns all topics a user is subscribed to */ -func GetAllSubscriptions(w http.ResponseWriter, r *http.Request) { +func GetUserSubscriptions(w http.ResponseWriter, r *http.Request) { id := r.Header.Get("HackIllinois-Identity") topics, err := service.GetSubscriptions(id) if err != nil { - errors.WriteError(w, r, errors.DatabaseError(err.Error(), "Could not retrieve notifications.")) + errors.WriteError(w, r, errors.DatabaseError(err.Error(), "Could not retrieve user's subscriptions.")) return } @@ -50,12 +50,12 @@ func GetAllSubscriptions(w http.ResponseWriter, r *http.Request) { /* Returns devices registered of a specific user */ -func GetRegisteredDevices(w http.ResponseWriter, r *http.Request) { +func GetUserRegisteredDevices(w http.ResponseWriter, r *http.Request) { id := r.Header.Get("HackIllinois-Identity") devices, err := service.GetUserDevices(id) if err != nil { - errors.WriteError(w, r, errors.DatabaseError(err.Error(), "Could not retrieve notifications.")) + errors.WriteError(w, r, errors.DatabaseError(err.Error(), "Could not retrieve user's registered devices.")) return }