From e523cc72d1c3ac7e96c0bd55493415ff2420acb1 Mon Sep 17 00:00:00 2001 From: James Tombleson Date: Thu, 2 May 2024 17:36:39 -0700 Subject: [PATCH] updated swagger defs and removed old dto package --- docs/docs.go | 79 ++++++++++++-------------- docs/swagger.json | 79 ++++++++++++-------------- docs/swagger.yaml | 79 ++++++++++++-------------- internal/handler/v1/articles.go | 8 +-- internal/handler/v1/discordwebhooks.go | 32 +++++------ internal/handler/v1/handler.go | 26 +++++---- internal/handler/v1/queue.go | 17 +++--- internal/handler/v1/settings.go | 2 +- internal/handler/v1/sources.go | 22 +++---- internal/handler/v1/subscriptions.go | 73 +++++++++++------------- 10 files changed, 197 insertions(+), 220 deletions(-) diff --git a/docs/docs.go b/docs/docs.go index 85bff2f..4dfaa2c 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -16,7 +16,7 @@ const docTemplate = `{ "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { - "/articles": { + "/v1/articles": { "get": { "produces": [ "application/json" @@ -55,7 +55,7 @@ const docTemplate = `{ } } }, - "/articles/by/sourceid": { + "/v1/articles/by/sourceid": { "get": { "produces": [ "application/json" @@ -101,7 +101,7 @@ const docTemplate = `{ } } }, - "/articles/{ID}": { + "/v1/articles/{ID}": { "get": { "produces": [ "application/json" @@ -141,7 +141,7 @@ const docTemplate = `{ } } }, - "/articles/{ID}/details": { + "/v1/articles/{ID}/details": { "get": { "produces": [ "application/json" @@ -181,14 +181,13 @@ const docTemplate = `{ } } }, - "/discord/webhooks": { + "/v1/discord/webhooks": { "get": { "produces": [ "application/json" ], "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Returns the top 100", "responses": { @@ -213,14 +212,13 @@ const docTemplate = `{ } } }, - "/discord/webhooks/by/serverAndChannel": { + "/v1/discord/webhooks/by/serverAndChannel": { "get": { "produces": [ "application/json" ], "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Returns all the known web hooks based on the Server and Channel given.", "parameters": [ @@ -261,11 +259,10 @@ const docTemplate = `{ } } }, - "/discord/webhooks/new": { + "/v1/discord/webhooks/new": { "post": { "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Creates a new record for a discord web hook to post data to.", "parameters": [ @@ -313,11 +310,10 @@ const docTemplate = `{ } } }, - "/discord/webhooks/{ID}": { + "/v1/discord/webhooks/{ID}": { "delete": { "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Deletes a record by ID.", "parameters": [ @@ -351,11 +347,10 @@ const docTemplate = `{ } } }, - "/discord/webhooks/{ID}/disable": { + "/v1/discord/webhooks/{ID}/disable": { "post": { "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Disables a Webhook from being used.", "parameters": [ @@ -389,11 +384,10 @@ const docTemplate = `{ } } }, - "/discord/webhooks/{ID}/enable": { + "/v1/discord/webhooks/{ID}/enable": { "post": { "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Enables a source to continue processing.", "parameters": [ @@ -408,14 +402,13 @@ const docTemplate = `{ "responses": {} } }, - "/discord/webhooks/{id}": { + "/v1/discord/webhooks/{id}": { "get": { "produces": [ "application/json" ], "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Returns the top 100 entries from the queue to be processed.", "parameters": [ @@ -449,7 +442,7 @@ const docTemplate = `{ } } }, - "/queue/discord/webhooks": { + "/v1/queue/discord/webhooks": { "get": { "produces": [ "application/json" @@ -468,7 +461,7 @@ const docTemplate = `{ } } }, - "/settings/{key}": { + "/v1/settings/{key}": { "get": { "produces": [ "application/json" @@ -489,7 +482,7 @@ const docTemplate = `{ "responses": {} } }, - "/sources": { + "/v1/sources": { "get": { "produces": [ "application/json" @@ -522,7 +515,7 @@ const docTemplate = `{ } } }, - "/sources/by/source": { + "/v1/sources/by/source": { "get": { "produces": [ "application/json" @@ -568,7 +561,7 @@ const docTemplate = `{ } } }, - "/sources/by/sourceAndName": { + "/v1/sources/by/sourceAndName": { "get": { "produces": [ "application/json" @@ -615,7 +608,7 @@ const docTemplate = `{ } } }, - "/sources/new/reddit": { + "/v1/sources/new/reddit": { "post": { "tags": [ "Source" @@ -659,7 +652,7 @@ const docTemplate = `{ } } }, - "/sources/new/rss": { + "/v1/sources/new/rss": { "post": { "tags": [ "Source" @@ -703,7 +696,7 @@ const docTemplate = `{ } } }, - "/sources/new/twitch": { + "/v1/sources/new/twitch": { "post": { "tags": [ "Source" @@ -721,7 +714,7 @@ const docTemplate = `{ "responses": {} } }, - "/sources/new/youtube": { + "/v1/sources/new/youtube": { "post": { "tags": [ "Source" @@ -746,7 +739,7 @@ const docTemplate = `{ "responses": {} } }, - "/sources/{id}": { + "/v1/sources/{id}": { "get": { "produces": [ "application/json" @@ -802,7 +795,7 @@ const docTemplate = `{ "responses": {} } }, - "/sources/{id}/disable": { + "/v1/sources/{id}/disable": { "post": { "tags": [ "Source" @@ -839,7 +832,7 @@ const docTemplate = `{ } } }, - "/sources/{id}/enable": { + "/v1/sources/{id}/enable": { "post": { "tags": [ "Source" @@ -876,7 +869,7 @@ const docTemplate = `{ } } }, - "/subscriptions": { + "/v1/subscriptions": { "get": { "produces": [ "application/json" @@ -907,7 +900,7 @@ const docTemplate = `{ } } }, - "/subscriptions/by/SourceId": { + "/v1/subscriptions/by/SourceId": { "get": { "produces": [ "application/json" @@ -935,7 +928,7 @@ const docTemplate = `{ } } }, - "/subscriptions/by/discordId": { + "/v1/subscriptions/by/discordId": { "get": { "produces": [ "application/json" @@ -975,7 +968,7 @@ const docTemplate = `{ } } }, - "/subscriptions/details": { + "/v1/subscriptions/details": { "get": { "produces": [ "application/json" @@ -994,7 +987,7 @@ const docTemplate = `{ } } }, - "/subscriptions/discord/webhook/delete": { + "/v1/subscriptions/discord/webhook/delete": { "delete": { "tags": [ "Subscription" @@ -1012,7 +1005,7 @@ const docTemplate = `{ "responses": {} } }, - "/subscriptions/discord/webhook/new": { + "/v1/subscriptions/discord/webhook/new": { "post": { "tags": [ "Subscription" diff --git a/docs/swagger.json b/docs/swagger.json index b4260d7..1457fe6 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -7,7 +7,7 @@ }, "basePath": "/api", "paths": { - "/articles": { + "/v1/articles": { "get": { "produces": [ "application/json" @@ -46,7 +46,7 @@ } } }, - "/articles/by/sourceid": { + "/v1/articles/by/sourceid": { "get": { "produces": [ "application/json" @@ -92,7 +92,7 @@ } } }, - "/articles/{ID}": { + "/v1/articles/{ID}": { "get": { "produces": [ "application/json" @@ -132,7 +132,7 @@ } } }, - "/articles/{ID}/details": { + "/v1/articles/{ID}/details": { "get": { "produces": [ "application/json" @@ -172,14 +172,13 @@ } } }, - "/discord/webhooks": { + "/v1/discord/webhooks": { "get": { "produces": [ "application/json" ], "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Returns the top 100", "responses": { @@ -204,14 +203,13 @@ } } }, - "/discord/webhooks/by/serverAndChannel": { + "/v1/discord/webhooks/by/serverAndChannel": { "get": { "produces": [ "application/json" ], "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Returns all the known web hooks based on the Server and Channel given.", "parameters": [ @@ -252,11 +250,10 @@ } } }, - "/discord/webhooks/new": { + "/v1/discord/webhooks/new": { "post": { "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Creates a new record for a discord web hook to post data to.", "parameters": [ @@ -304,11 +301,10 @@ } } }, - "/discord/webhooks/{ID}": { + "/v1/discord/webhooks/{ID}": { "delete": { "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Deletes a record by ID.", "parameters": [ @@ -342,11 +338,10 @@ } } }, - "/discord/webhooks/{ID}/disable": { + "/v1/discord/webhooks/{ID}/disable": { "post": { "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Disables a Webhook from being used.", "parameters": [ @@ -380,11 +375,10 @@ } } }, - "/discord/webhooks/{ID}/enable": { + "/v1/discord/webhooks/{ID}/enable": { "post": { "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Enables a source to continue processing.", "parameters": [ @@ -399,14 +393,13 @@ "responses": {} } }, - "/discord/webhooks/{id}": { + "/v1/discord/webhooks/{id}": { "get": { "produces": [ "application/json" ], "tags": [ - "Discord", - "Webhook" + "DiscordWebhook" ], "summary": "Returns the top 100 entries from the queue to be processed.", "parameters": [ @@ -440,7 +433,7 @@ } } }, - "/queue/discord/webhooks": { + "/v1/queue/discord/webhooks": { "get": { "produces": [ "application/json" @@ -459,7 +452,7 @@ } } }, - "/settings/{key}": { + "/v1/settings/{key}": { "get": { "produces": [ "application/json" @@ -480,7 +473,7 @@ "responses": {} } }, - "/sources": { + "/v1/sources": { "get": { "produces": [ "application/json" @@ -513,7 +506,7 @@ } } }, - "/sources/by/source": { + "/v1/sources/by/source": { "get": { "produces": [ "application/json" @@ -559,7 +552,7 @@ } } }, - "/sources/by/sourceAndName": { + "/v1/sources/by/sourceAndName": { "get": { "produces": [ "application/json" @@ -606,7 +599,7 @@ } } }, - "/sources/new/reddit": { + "/v1/sources/new/reddit": { "post": { "tags": [ "Source" @@ -650,7 +643,7 @@ } } }, - "/sources/new/rss": { + "/v1/sources/new/rss": { "post": { "tags": [ "Source" @@ -694,7 +687,7 @@ } } }, - "/sources/new/twitch": { + "/v1/sources/new/twitch": { "post": { "tags": [ "Source" @@ -712,7 +705,7 @@ "responses": {} } }, - "/sources/new/youtube": { + "/v1/sources/new/youtube": { "post": { "tags": [ "Source" @@ -737,7 +730,7 @@ "responses": {} } }, - "/sources/{id}": { + "/v1/sources/{id}": { "get": { "produces": [ "application/json" @@ -793,7 +786,7 @@ "responses": {} } }, - "/sources/{id}/disable": { + "/v1/sources/{id}/disable": { "post": { "tags": [ "Source" @@ -830,7 +823,7 @@ } } }, - "/sources/{id}/enable": { + "/v1/sources/{id}/enable": { "post": { "tags": [ "Source" @@ -867,7 +860,7 @@ } } }, - "/subscriptions": { + "/v1/subscriptions": { "get": { "produces": [ "application/json" @@ -898,7 +891,7 @@ } } }, - "/subscriptions/by/SourceId": { + "/v1/subscriptions/by/SourceId": { "get": { "produces": [ "application/json" @@ -926,7 +919,7 @@ } } }, - "/subscriptions/by/discordId": { + "/v1/subscriptions/by/discordId": { "get": { "produces": [ "application/json" @@ -966,7 +959,7 @@ } } }, - "/subscriptions/details": { + "/v1/subscriptions/details": { "get": { "produces": [ "application/json" @@ -985,7 +978,7 @@ } } }, - "/subscriptions/discord/webhook/delete": { + "/v1/subscriptions/discord/webhook/delete": { "delete": { "tags": [ "Subscription" @@ -1003,7 +996,7 @@ "responses": {} } }, - "/subscriptions/discord/webhook/new": { + "/v1/subscriptions/discord/webhook/new": { "post": { "tags": [ "Subscription" diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 9638e3f..a77fcff 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -241,7 +241,7 @@ info: title: NewsBot collector version: "0.1" paths: - /articles: + /v1/articles: get: parameters: - description: page number @@ -266,7 +266,7 @@ paths: summary: Lists the top 25 records ordering from newest to oldest. tags: - Articles - /articles/{ID}: + /v1/articles/{ID}: get: parameters: - description: int @@ -292,7 +292,7 @@ paths: summary: Returns an article based on defined ID. tags: - Articles - /articles/{ID}/details: + /v1/articles/{ID}/details: get: parameters: - description: int @@ -318,7 +318,7 @@ paths: summary: Returns an article and source based on defined ID. tags: - Articles - /articles/by/sourceid: + /v1/articles/by/sourceid: get: parameters: - description: source id @@ -349,7 +349,7 @@ paths: 25. tags: - Articles - /discord/webhooks: + /v1/discord/webhooks: get: produces: - application/json @@ -368,9 +368,8 @@ paths: $ref: '#/definitions/domain.BaseResponse' summary: Returns the top 100 tags: - - Discord - - Webhook - /discord/webhooks/{ID}: + - DiscordWebhook + /v1/discord/webhooks/{ID}: delete: parameters: - description: id @@ -393,9 +392,8 @@ paths: $ref: '#/definitions/domain.BaseResponse' summary: Deletes a record by ID. tags: - - Discord - - Webhook - /discord/webhooks/{ID}/disable: + - DiscordWebhook + /v1/discord/webhooks/{ID}/disable: post: parameters: - description: id @@ -418,9 +416,8 @@ paths: $ref: '#/definitions/domain.BaseResponse' summary: Disables a Webhook from being used. tags: - - Discord - - Webhook - /discord/webhooks/{ID}/enable: + - DiscordWebhook + /v1/discord/webhooks/{ID}/enable: post: parameters: - description: id @@ -431,9 +428,8 @@ paths: responses: {} summary: Enables a source to continue processing. tags: - - Discord - - Webhook - /discord/webhooks/{id}: + - DiscordWebhook + /v1/discord/webhooks/{id}: get: parameters: - description: id @@ -458,9 +454,8 @@ paths: $ref: '#/definitions/domain.BaseResponse' summary: Returns the top 100 entries from the queue to be processed. tags: - - Discord - - Webhook - /discord/webhooks/by/serverAndChannel: + - DiscordWebhook + /v1/discord/webhooks/by/serverAndChannel: get: parameters: - description: Fancy Server @@ -490,9 +485,8 @@ paths: $ref: '#/definitions/domain.BaseResponse' summary: Returns all the known web hooks based on the Server and Channel given. tags: - - Discord - - Webhook - /discord/webhooks/new: + - DiscordWebhook + /v1/discord/webhooks/new: post: parameters: - description: url @@ -525,9 +519,8 @@ paths: $ref: '#/definitions/domain.BaseResponse' summary: Creates a new record for a discord web hook to post data to. tags: - - Discord - - Webhook - /queue/discord/webhooks: + - DiscordWebhook + /v1/queue/discord/webhooks: get: produces: - application/json @@ -539,7 +532,7 @@ paths: summary: Returns the top 100 entries from the queue to be processed. tags: - Queue - /settings/{key}: + /v1/settings/{key}: get: parameters: - description: Settings Key value @@ -553,7 +546,7 @@ paths: summary: Returns a object based on the Key that was given. tags: - Settings - /sources: + /v1/sources: get: parameters: - description: page number @@ -574,7 +567,7 @@ paths: summary: Lists the top 50 records tags: - Source - /sources/{id}: + /v1/sources/{id}: get: parameters: - description: uuid @@ -611,7 +604,7 @@ paths: summary: Marks a source as deleted based on its ID value. tags: - Source - /sources/{id}/disable: + /v1/sources/{id}/disable: post: parameters: - description: id @@ -635,7 +628,7 @@ paths: summary: Disables a source from processing. tags: - Source - /sources/{id}/enable: + /v1/sources/{id}/enable: post: parameters: - description: id @@ -659,7 +652,7 @@ paths: summary: Enables a source to continue processing. tags: - Source - /sources/by/source: + /v1/sources/by/source: get: parameters: - description: Source Name @@ -689,7 +682,7 @@ paths: summary: 'Lists the top 50 records based on the name given. Example: reddit' tags: - Source - /sources/by/sourceAndName: + /v1/sources/by/sourceAndName: get: parameters: - description: dadjokes @@ -720,7 +713,7 @@ paths: summary: Returns a single entity by ID tags: - Source - /sources/new/reddit: + /v1/sources/new/reddit: post: parameters: - description: name @@ -749,7 +742,7 @@ paths: summary: Creates a new reddit source to monitor. tags: - Source - /sources/new/rss: + /v1/sources/new/rss: post: parameters: - description: Site Name @@ -778,7 +771,7 @@ paths: summary: Creates a new rss source to monitor. tags: - Source - /sources/new/twitch: + /v1/sources/new/twitch: post: parameters: - description: name @@ -790,7 +783,7 @@ paths: summary: Creates a new twitch source to monitor. tags: - Source - /sources/new/youtube: + /v1/sources/new/youtube: post: parameters: - description: name @@ -807,7 +800,7 @@ paths: summary: Creates a new youtube source to monitor. tags: - Source - /subscriptions: + /v1/subscriptions: get: produces: - application/json @@ -827,7 +820,7 @@ paths: summary: Returns the top 100 entries from the queue to be processed. tags: - Subscription - /subscriptions/by/SourceId: + /v1/subscriptions/by/SourceId: get: parameters: - description: id @@ -845,7 +838,7 @@ paths: summary: Returns the top 100 entries from the queue to be processed. tags: - Subscription - /subscriptions/by/discordId: + /v1/subscriptions/by/discordId: get: parameters: - description: id @@ -871,7 +864,7 @@ paths: summary: Returns the top 100 entries from the queue to be processed. tags: - Subscription - /subscriptions/details: + /v1/subscriptions/details: get: produces: - application/json @@ -883,7 +876,7 @@ paths: summary: Returns the top 50 entries with full deatils on the source and output. tags: - Subscription - /subscriptions/discord/webhook/delete: + /v1/subscriptions/discord/webhook/delete: delete: parameters: - description: id @@ -895,7 +888,7 @@ paths: summary: Removes a Discord WebHook Subscription based on the Subscription ID. tags: - Subscription - /subscriptions/discord/webhook/new: + /v1/subscriptions/discord/webhook/new: post: parameters: - description: discordWebHookId diff --git a/internal/handler/v1/articles.go b/internal/handler/v1/articles.go index 02ca2ef..0febc5d 100644 --- a/internal/handler/v1/articles.go +++ b/internal/handler/v1/articles.go @@ -14,7 +14,7 @@ import ( // @Produce application/json // @Param page query string false "page number" // @Tags Articles -// @Router /articles [get] +// @Router /v1/articles [get] // @Success 200 {object} domain.ArticleResponse // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -44,7 +44,7 @@ func (s *Handler) listArticles(c echo.Context) error { // @Param ID path string true "int" // @Produce application/json // @Tags Articles -// @Router /articles/{ID} [get] +// @Router /v1/articles/{ID} [get] // @Success 200 {object} domain.ArticleResponse "OK" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -78,7 +78,7 @@ func (s *Handler) getArticle(c echo.Context) error { // @Param ID path string true "int" // @Produce application/json // @Tags Articles -// @Router /articles/{ID}/details [get] +// @Router /v1/articles/{ID}/details [get] // @Success 200 {object} domain.ArticleDetailedResponse "OK" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -119,7 +119,7 @@ func (s *Handler) getArticleDetails(c echo.Context) error { // @Param page query int false "Page to query" // @Produce application/json // @Tags Articles -// @Router /articles/by/sourceid [get] +// @Router /v1/articles/by/sourceid [get] // @Success 200 {object} domain.ArticleResponse "OK" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse diff --git a/internal/handler/v1/discordwebhooks.go b/internal/handler/v1/discordwebhooks.go index 3e2cb11..328d179 100644 --- a/internal/handler/v1/discordwebhooks.go +++ b/internal/handler/v1/discordwebhooks.go @@ -13,8 +13,8 @@ import ( // ListDiscordWebhooks // @Summary Returns the top 100 // @Produce application/json -// @Tags Discord, Webhook -// @Router /discord/webhooks [get] +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks [get] // @Success 200 {object} domain.DiscordWebhookResponse // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -37,8 +37,8 @@ func (s *Handler) ListDiscordWebHooks(c echo.Context) error { // @Summary Returns the top 100 entries from the queue to be processed. // @Produce application/json // @Param id path int true "id" -// @Tags Discord, Webhook -// @Router /discord/webhooks/{id} [get] +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{id} [get] // @Success 200 {object} domain.DiscordWebhookResponse "OK" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -69,8 +69,8 @@ func (s *Handler) GetDiscordWebHooksById(c echo.Context) error { // @Produce application/json // @Param server query string true "Fancy Server" // @Param channel query string true "memes" -// @Tags Discord, Webhook -// @Router /discord/webhooks/by/serverAndChannel [get] +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/by/serverAndChannel [get] // @Success 200 {object} domain.DiscordWebhookResponse "OK" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -105,8 +105,8 @@ func (s *Handler) GetDiscordWebHooksByServerAndChannel(c echo.Context) error { // @Param url query string true "url" // @Param server query string true "Server name" // @Param channel query string true "Channel name" -// @Tags Discord, Webhook -// @Router /discord/webhooks/new [post] +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/new [post] // @Success 200 {object} domain.DiscordWebhookResponse "OK" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -164,8 +164,8 @@ func (s *Handler) NewDiscordWebHook(c echo.Context) error { // DisableDiscordWebHooks // @Summary Disables a Webhook from being used. // @Param id path int true "id" -// @Tags Discord, Webhook -// @Router /discord/webhooks/{ID}/disable [post] +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{ID}/disable [post] // @Success 200 {object} domain.DiscordWebhookResponse "OK" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -212,8 +212,8 @@ func (s *Handler) disableDiscordWebHook(c echo.Context) error { // EnableDiscordWebHook // @Summary Enables a source to continue processing. // @Param id path int true "id" -// @Tags Discord, Webhook -// @Router /discord/webhooks/{ID}/enable [post] +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{ID}/enable [post] func (s *Handler) enableDiscordWebHook(c echo.Context) error { id, err := strconv.Atoi(c.Param("ID")) if err != nil { @@ -253,8 +253,8 @@ func (s *Handler) enableDiscordWebHook(c echo.Context) error { // DeleteDiscordWebHook // @Summary Deletes a record by ID. // @Param id path string true "id" -// @Tags Discord, Webhook -// @Router /discord/webhooks/{ID} [delete] +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{ID} [delete] // @Success 200 {object} domain.DiscordWebhookResponse "OK" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -298,8 +298,8 @@ func (s *Handler) deleteDiscordWebHook(c echo.Context) error { // UpdateDiscordWebHook // @Summary Updates a valid discord webhook ID based on the body given. // @Param id path string true "id" -// @Tags Discord, Webhook -// @Router /discord/webhooks/{id} [patch] +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{id} [patch] // @Success 200 {object} domain.DiscordWebhookResponse "OK" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse diff --git a/internal/handler/v1/handler.go b/internal/handler/v1/handler.go index c510f65..149de1f 100644 --- a/internal/handler/v1/handler.go +++ b/internal/handler/v1/handler.go @@ -5,19 +5,19 @@ import ( "database/sql" "github.com/labstack/echo/v4" - _ "github.com/lib/pq" + "github.com/labstack/echo/v4/middleware" swagger "github.com/swaggo/echo-swagger" + _ "git.jamestombleson.com/jtom38/newsbot-api/docs" "git.jamestombleson.com/jtom38/newsbot-api/internal/database" "git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/services" - "git.jamestombleson.com/jtom38/newsbot-api/internal/services/dto" ) type Handler struct { Router *echo.Echo Db *database.Queries - dto *dto.DtoClient + //dto *dto.DtoClient config services.Configs repo services.RepositoryService } @@ -39,23 +39,26 @@ var ( ErrUnableToConvertToJson string = "Unable to convert to json" ) -func NewServer(ctx context.Context, db *database.Queries, configs services.Configs, conn *sql.DB) *Handler { +func NewServer(ctx context.Context, configs services.Configs, conn *sql.DB) *Handler { s := &Handler{ - Db: db, - dto: dto.NewDtoClient(db), + //Db: db, + //dto: dto.NewDtoClient(db), config: configs, repo: services.NewRepositoryService(conn), } router := echo.New() + router.Pre(middleware.RemoveTrailingSlash()) + router.Pre(middleware.Logger()) + router.Pre(middleware.Recover()) router.GET("/swagger/*", swagger.WrapHandler) v1 := router.Group("/api/v1") articles := v1.Group("/articles") - articles.GET("/", s.listArticles) - articles.GET("/:id", s.getArticle) - articles.GET("/:id/details", s.getArticleDetails) - articles.GET("/by/source/:id", s.ListArticlesBySourceId) + articles.GET("", s.listArticles) + articles.GET(":id", s.getArticle) + articles.GET(":id/details", s.getArticleDetails) + articles.GET("by/source/:id", s.ListArticlesBySourceId) //dwh := v1.Group("/discord/webhooks") //dwh.GET("/", s.ListDiscordWebHooks) @@ -73,7 +76,7 @@ func NewServer(ctx context.Context, db *database.Queries, configs services.Confi //settings.GET("/", s.getSettings) sources := v1.Group("/sources") - sources.GET("/", s.listSources) + sources.GET("", s.listSources) sources.GET("/by/source", s.listSourcesBySource) sources.GET("/by/sourceAndName", s.GetSourceBySourceAndName) //sources.POST("/new/reddit", s.newRedditSource) @@ -93,6 +96,7 @@ func NewServer(ctx context.Context, db *database.Queries, configs services.Confi subs.POST("/discord/webhook/new", s.newDiscordWebHookSubscription) subs.DELETE("/discord/webhook/delete", s.DeleteDiscordWebHookSubscription) + s.Router = router return s } diff --git a/internal/handler/v1/queue.go b/internal/handler/v1/queue.go index deadb89..92878ae 100644 --- a/internal/handler/v1/queue.go +++ b/internal/handler/v1/queue.go @@ -3,7 +3,6 @@ package v1 import ( "net/http" - "git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/domain/models" "github.com/labstack/echo/v4" ) @@ -17,7 +16,7 @@ type ListDiscordWebHooksQueueResults struct { // @Summary Returns the top 100 entries from the queue to be processed. // @Produce application/json // @Tags Queue -// @Router /queue/discord/webhooks [get] +// @Router /v1/queue/discord/webhooks [get] // @Success 200 {object} ListDiscordWebHooksQueueResults "ok" func (s *Handler) ListDiscordWebhookQueue(c echo.Context) error { p := ListDiscordWebHooksQueueResults{ @@ -28,13 +27,13 @@ func (s *Handler) ListDiscordWebhookQueue(c echo.Context) error { } // Get the raw resp from sql - res, err := s.dto.ListDiscordWebhookQueueDetails(c.Request().Context(), 50) - if err != nil { - return c.JSON(http.StatusInternalServerError, domain.BaseResponse{ - Message: err.Error(), - }) - } + //res, err := s.dto.ListDiscordWebhookQueueDetails(c.Request().Context(), 50) + //if err != nil { + // return c.JSON(http.StatusInternalServerError, domain.BaseResponse{ + // Message: err.Error(), + // }) + //} - p.Payload = res + //p.Payload = res return c.JSON(http.StatusOK, p) } diff --git a/internal/handler/v1/settings.go b/internal/handler/v1/settings.go index 114500d..26367af 100644 --- a/internal/handler/v1/settings.go +++ b/internal/handler/v1/settings.go @@ -14,7 +14,7 @@ import ( // @Param key path string true "Settings Key value" // @Produce application/json // @Tags Settings -// @Router /settings/{key} [get] +// @Router /v1/settings/{key} [get] func (s *Handler) getSettings(c echo.Context) error { id := c.Param("ID") diff --git a/internal/handler/v1/sources.go b/internal/handler/v1/sources.go index 49e4d8f..2297858 100644 --- a/internal/handler/v1/sources.go +++ b/internal/handler/v1/sources.go @@ -31,7 +31,7 @@ type GetSource struct { // @Param page query string false "page number" // @Produce application/json // @Tags Source -// @Router /sources [get] +// @Router /v1/sources [get] // @Success 200 {object} domain.SourcesResponse "ok" // @Failure 400 {object} domain.BaseResponse "Unable to reach SQL or Data problems" func (s *Handler) listSources(c echo.Context) error { @@ -62,7 +62,7 @@ func (s *Handler) listSources(c echo.Context) error { // @Param page query string false "page number" // @Produce application/json // @Tags Source -// @Router /sources/by/source [get] +// @Router /v1/sources/by/source [get] // @Success 200 {object} domain.SourcesResponse "ok" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -100,7 +100,7 @@ func (s *Handler) listSourcesBySource(c echo.Context) error { // @Param id path int true "uuid" // @Produce application/json // @Tags Source -// @Router /sources/{id} [get] +// @Router /v1/sources/{id} [get] // @Success 200 {object} domain.SourcesResponse "ok" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -135,7 +135,7 @@ func (s *Handler) getSource(c echo.Context) error { // @Param source query string true "reddit" // @Produce application/json // @Tags Source -// @Router /sources/by/sourceAndName [get] +// @Router /v1/sources/by/sourceAndName [get] // @Success 200 {object} domain.SourcesResponse "ok" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -170,7 +170,7 @@ func (s *Handler) GetSourceBySourceAndName(c echo.Context) error { // @Param name query string true "name" // @Param url query string true "url" // @Tags Source -// @Router /sources/new/reddit [post] +// @Router /v1/sources/new/reddit [post] // @Success 200 {object} domain.SourcesResponse "ok" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -226,7 +226,7 @@ func (s *Handler) newRedditSource(c echo.Context) error { // @Param name query string true "name" // @Param url query string true "url" // @Tags Source -// @Router /sources/new/youtube [post] +// @Router /v1/sources/new/youtube [post] func (s *Handler) newYoutubeSource(c echo.Context) error { var param domain.NewSourceParamRequest err := c.Bind(¶m) @@ -289,7 +289,7 @@ func (s *Handler) newYoutubeSource(c echo.Context) error { // @Summary Creates a new twitch source to monitor. // @Param name query string true "name" // @Tags Source -// @Router /sources/new/twitch [post] +// @Router /v1/sources/new/twitch [post] func (s *Handler) newTwitchSource(c echo.Context) error { var param domain.NewSourceParamRequest err := c.Bind(¶m) @@ -337,7 +337,7 @@ func (s *Handler) newTwitchSource(c echo.Context) error { // @Param name query string true "Site Name" // @Param url query string true "RSS Url" // @Tags Source -// @Router /sources/new/rss [post] +// @Router /v1/sources/new/rss [post] // @Success 200 {object} domain.SourcesResponse "ok" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -387,7 +387,7 @@ func (s *Handler) newRssSource(c echo.Context) error { // @Summary Marks a source as deleted based on its ID value. // @Param id path string true "id" // @Tags Source -// @Router /sources/{id} [POST] +// @Router /v1/sources/{id} [POST] func (s *Handler) deleteSources(c echo.Context) error { id := c.Param("ID") uuid, err := uuid.Parse(id) @@ -432,7 +432,7 @@ func (s *Handler) deleteSources(c echo.Context) error { // @Summary Disables a source from processing. // @Param id path int true "id" // @Tags Source -// @Router /sources/{id}/disable [post] +// @Router /v1/sources/{id}/disable [post] // @Success 200 {object} domain.SourcesResponse "ok" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse @@ -474,7 +474,7 @@ func (s *Handler) disableSource(c echo.Context) error { // @Summary Enables a source to continue processing. // @Param id path string true "id" // @Tags Source -// @Router /sources/{id}/enable [post] +// @Router /v1/sources/{id}/enable [post] // @Success 200 {object} domain.SourcesResponse "ok" // @Failure 400 {object} domain.BaseResponse // @Failure 500 {object} domain.BaseResponse diff --git a/internal/handler/v1/subscriptions.go b/internal/handler/v1/subscriptions.go index eff2512..dcb7440 100644 --- a/internal/handler/v1/subscriptions.go +++ b/internal/handler/v1/subscriptions.go @@ -31,7 +31,7 @@ type ListSubscriptionDetails struct { // @Summary Returns the top 100 entries from the queue to be processed. // @Produce application/json // @Tags Subscription -// @Router /subscriptions [get] +// @Router /v1/subscriptions [get] // @Success 200 {object} ListSubscriptions "ok" // @Failure 400 {object} ApiError "Unable to reach SQL." // @Failure 500 {object} ApiError "Failed to process data from SQL." @@ -43,12 +43,11 @@ func (s *Handler) ListSubscriptions(c echo.Context) error { }, } - res, err := s.dto.ListSubscriptions(c.Request().Context(), 50) - if err != nil { - return s.WriteError(c, err, http.StatusBadRequest) - } - - payload.Payload = res + //res, err := s.dto.ListSubscriptions(c.Request().Context(), 50) + //if err != nil { + // return s.WriteError(c, err, http.StatusBadRequest) + //} + //payload.Payload = res return c.JSON(http.StatusOK, payload) } @@ -56,7 +55,7 @@ func (s *Handler) ListSubscriptions(c echo.Context) error { // @Summary Returns the top 50 entries with full deatils on the source and output. // @Produce application/json // @Tags Subscription -// @Router /subscriptions/details [get] +// @Router /v1/subscriptions/details [get] // @Success 200 {object} ListSubscriptionDetails "ok" func (s *Handler) ListSubscriptionDetails(c echo.Context) error { payload := ListSubscriptionDetails{ @@ -66,12 +65,11 @@ func (s *Handler) ListSubscriptionDetails(c echo.Context) error { }, } - res, err := s.dto.ListSubscriptionDetails(c.Request().Context(), 50) - if err != nil { - return s.WriteError(c, err, http.StatusInternalServerError) - } - - payload.Payload = res + //res, err := s.dto.ListSubscriptionDetails(c.Request().Context(), 50) + //if err != nil { + // return s.WriteError(c, err, http.StatusInternalServerError) + //} + //payload.Payload = res return c.JSON(http.StatusOK, payload) } @@ -80,7 +78,7 @@ func (s *Handler) ListSubscriptionDetails(c echo.Context) error { // @Produce application/json // @Param id query string true "id" // @Tags Subscription -// @Router /subscriptions/by/discordId [get] +// @Router /v1/subscriptions/by/discordId [get] // @Success 200 {object} ListSubscriptions "ok" // @Failure 400 {object} ApiError "Unable to reach SQL or Data problems" // @Failure 500 {object} ApiError "Data problems" @@ -97,18 +95,16 @@ func (s *Handler) GetSubscriptionsByDiscordId(c echo.Context) error { return s.WriteError(c, errors.New(ErrIdValueMissing), http.StatusBadRequest) } - uuid, err := uuid.Parse(id) - if err != nil { - return s.WriteError(c, errors.New(ErrValueNotUuid), http.StatusBadRequest) + //uuid, err := uuid.Parse(id) + //if err != nil { + // return s.WriteError(c, errors.New(ErrValueNotUuid), http.StatusBadRequest) + //} - } - - res, err := s.dto.ListSubscriptionsByDiscordWebhookId(context.Background(), uuid) - if err != nil { - return s.WriteError(c, err, http.StatusNoContent) - } - - p.Payload = res + //res, err := s.dto.ListSubscriptionsByDiscordWebhookId(context.Background(), uuid) + //if err != nil { + // return s.WriteError(c, err, http.StatusNoContent) + //} + //p.Payload = res return c.JSON(http.StatusOK, p) } @@ -117,7 +113,7 @@ func (s *Handler) GetSubscriptionsByDiscordId(c echo.Context) error { // @Produce application/json // @Param id query string true "id" // @Tags Subscription -// @Router /subscriptions/by/SourceId [get] +// @Router /v1/subscriptions/by/SourceId [get] // @Success 200 {object} ListSubscriptions "ok" func (s *Handler) GetSubscriptionsBySourceId(c echo.Context) error { p := ListSubscriptions{ @@ -132,17 +128,16 @@ func (s *Handler) GetSubscriptionsBySourceId(c echo.Context) error { return s.WriteError(c, errors.New(ErrIdValueMissing), http.StatusBadRequest) } - uuid, err := uuid.Parse(_id) - if err != nil { - return s.WriteError(c, err, http.StatusBadRequest) - } + //uuid, err := uuid.Parse(_id) + //if err != nil { + // return s.WriteError(c, err, http.StatusBadRequest) + //} - res, err := s.dto.ListSubscriptionsBySourceId(context.Background(), uuid) - if err != nil { - return s.WriteError(c, err, http.StatusNoContent) - } - - p.Payload = res + //res, err := s.dto.ListSubscriptionsBySourceId(context.Background(), uuid) + //if err != nil { + // return s.WriteError(c, err, http.StatusNoContent) + //} + //p.Payload = res return c.JSON(http.StatusOK, p) } @@ -151,7 +146,7 @@ func (s *Handler) GetSubscriptionsBySourceId(c echo.Context) error { // @Param discordWebHookId query string true "discordWebHookId" // @Param sourceId query string true "sourceId" // @Tags Subscription -// @Router /subscriptions/discord/webhook/new [post] +// @Router /v1/subscriptions/discord/webhook/new [post] func (s *Handler) newDiscordWebHookSubscription(c echo.Context) error { // Extract the values given discordWebHookId := c.QueryParam("discordWebHookId") @@ -207,7 +202,7 @@ func (s *Handler) newDiscordWebHookSubscription(c echo.Context) error { // @Summary Removes a Discord WebHook Subscription based on the Subscription ID. // @Param id query string true "id" // @Tags Subscription -// @Router /subscriptions/discord/webhook/delete [delete] +// @Router /v1/subscriptions/discord/webhook/delete [delete] func (s *Handler) DeleteDiscordWebHookSubscription(c echo.Context) error { var ErrMissingSubscriptionID string = "the request was missing a 'Id'"