diff --git a/api/controller/subscription.go b/api/controller/subscription.go index 96e64dd20..1e725669c 100644 --- a/api/controller/subscription.go +++ b/api/controller/subscription.go @@ -65,6 +65,16 @@ func CreateSubscription(dataBase moira.Database, userLogin, teamID string, subsc return nil } +// GetSubscription returns subscription by it's id. +func GetSubscription(dataBase moira.Database, subscriptionID string) (*dto.Subscription, *api.ErrorResponse) { + subscription, err := dataBase.GetSubscription(subscriptionID) + if err != nil { + return nil, api.ErrorInternalServer(err) + } + dto := dto.Subscription(subscription) + return &dto, nil +} + // UpdateSubscription updates existing subscription. func UpdateSubscription(dataBase moira.Database, subscriptionID string, userLogin string, subscription *dto.Subscription) *api.ErrorResponse { subscription.ID = subscriptionID diff --git a/api/handler/subscription.go b/api/handler/subscription.go index b86e2a267..d40beb921 100644 --- a/api/handler/subscription.go +++ b/api/handler/subscription.go @@ -20,6 +20,7 @@ func subscription(router chi.Router) { router.Route("/{subscriptionId}", func(router chi.Router) { router.Use(middleware.SubscriptionContext) router.Use(subscriptionFilter) + router.Get("/", getSubscription) router.Put("/", updateSubscription) router.Delete("/", removeSubscription) router.Put("/test", sendTestNotification) @@ -102,6 +103,31 @@ func subscriptionFilter(next http.Handler) http.Handler { }) } +// nolint: gofmt,goimports +// +// @summary Get subscription by id +// @id get-subscription +// @tags subscription +// @produce json +// @param subscriptionID path string true "ID of the subscription to get" default(bcba82f5-48cf-44c0-b7d6-e1d32c64a88c) +// @success 200 {object} dto.Subscription "Subscription fetched successfully" +// @failure 403 {object} api.ErrorForbiddenExample "Forbidden" +// @failure 422 {object} api.ErrorRenderExample "Render error" +// @failure 500 {object} api.ErrorInternalServerExample "Internal server error" +// @router /subscription/{subscriptionID} [get] +func getSubscription(writer http.ResponseWriter, request *http.Request) { + subscriptionID := middleware.GetSubscriptionID(request) + subscription, err := controller.GetSubscription(database, subscriptionID) + if err != nil { + render.Render(writer, request, err) //nolint + return + } + if err := render.Render(writer, request, subscription); err != nil { + render.Render(writer, request, api.ErrorRender(err)) //nolint + return + } +} + // nolint: gofmt,goimports // // @summary Update a subscription