From 27ead1c68a952f8c2567514422a86016a117664b Mon Sep 17 00:00:00 2001 From: James Tombleson Date: Wed, 17 Jul 2024 22:01:29 -0700 Subject: [PATCH] cleaned up swagger comments --- cmd/server.go | 14 +- docs/docs.go | 125 +++++++-------- docs/swagger.json | 124 +++++++-------- docs/swagger.yaml | 131 +++++++-------- internal/handler/v1/articles.go | 74 ++++----- internal/handler/v1/discordwebhooks.go | 136 ++++++++-------- internal/handler/v1/sources.go | 211 +++++++++++++------------ internal/handler/v1/users.go | 110 ++++++------- 8 files changed, 456 insertions(+), 469 deletions(-) diff --git a/cmd/server.go b/cmd/server.go index dad9a4b..4f0ac04 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -16,13 +16,13 @@ import ( "git.jamestombleson.com/jtom38/newsbot-api/internal/services/cron" ) -// @title NewsBot collector -// @version 0.1 -// @BasePath /api -// @securityDefinitions.apikey Bearer -// @in header -// @name Authorization -// @description Type "Bearer" followed by a space and JWT token. +// @title NewsBot collector +// @version 0.1 +// @BasePath /api +// @securityDefinitions.apikey Bearer +// @in header +// @name Authorization +// @description Type "Bearer" followed by a space and JWT token. func main() { ctx := context.Background() diff --git a/docs/docs.go b/docs/docs.go index 61c249f..fd059ef 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -32,10 +32,11 @@ const docTemplate = `{ "summary": "Lists the top 25 records ordering from newest to oldest.", "parameters": [ { - "type": "string", + "type": "integer", "description": "page number", "name": "page", - "in": "query" + "in": "query", + "required": true } ], "responses": { @@ -60,7 +61,7 @@ const docTemplate = `{ } } }, - "/v1/articles/by/sourceId": { + "/v1/articles/by/source/{id}": { "get": { "security": [ { @@ -79,7 +80,7 @@ const docTemplate = `{ "type": "string", "description": "source id", "name": "id", - "in": "query", + "in": "path", "required": true }, { @@ -111,7 +112,7 @@ const docTemplate = `{ } } }, - "/v1/articles/{ID}": { + "/v1/articles/{id}": { "get": { "security": [ { @@ -129,7 +130,7 @@ const docTemplate = `{ { "type": "string", "description": "int", - "name": "ID", + "name": "id", "in": "path", "required": true } @@ -156,7 +157,7 @@ const docTemplate = `{ } } }, - "/v1/articles/{ID}/details": { + "/v1/articles/{id}/details": { "get": { "security": [ { @@ -174,7 +175,7 @@ const docTemplate = `{ { "type": "string", "description": "int", - "name": "ID", + "name": "id", "in": "path", "required": true } @@ -345,7 +346,50 @@ const docTemplate = `{ } } }, - "/v1/discord/webhooks/{ID}": { + "/v1/discord/webhooks/{id}": { + "get": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "DiscordWebhook" + ], + "summary": "Returns the top 100 entries from the queue to be processed.", + "parameters": [ + { + "type": "integer", + "description": "id", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/domain.DiscordWebhookResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/domain.DiscordWebhookResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/domain.DiscordWebhookResponse" + } + } + } + }, "delete": { "security": [ { @@ -387,7 +431,7 @@ const docTemplate = `{ } } }, - "/v1/discord/webhooks/{ID}/disable": { + "/v1/discord/webhooks/{id}/disable": { "post": { "security": [ { @@ -429,7 +473,7 @@ const docTemplate = `{ } } }, - "/v1/discord/webhooks/{ID}/enable": { + "/v1/discord/webhooks/{id}/enable": { "post": { "security": [ { @@ -471,51 +515,6 @@ const docTemplate = `{ } } }, - "/v1/discord/webhooks/{id}": { - "get": { - "security": [ - { - "Bearer": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "DiscordWebhook" - ], - "summary": "Returns the top 100 entries from the queue to be processed.", - "parameters": [ - { - "type": "integer", - "description": "id", - "name": "id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/domain.DiscordWebhookResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/domain.DiscordWebhookResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/domain.DiscordWebhookResponse" - } - } - } - } - }, "/v1/sources": { "get": { "security": [ @@ -1512,24 +1511,16 @@ const docTemplate = `{ } } } - }, - "securityDefinitions": { - "Bearer": { - "description": "Type \"Bearer\" followed by a space and JWT token.", - "type": "apiKey", - "name": "Authorization", - "in": "header" - } } }` // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ - Version: "0.1", + Version: "", Host: "", - BasePath: "/api", + BasePath: "", Schemes: []string{}, - Title: "NewsBot collector", + Title: "", Description: "", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, diff --git a/docs/swagger.json b/docs/swagger.json index f67f4ad..f5fc99a 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -1,11 +1,8 @@ { "swagger": "2.0", "info": { - "title": "NewsBot collector", - "contact": {}, - "version": "0.1" + "contact": {} }, - "basePath": "/api", "paths": { "/v1/articles": { "get": { @@ -23,10 +20,11 @@ "summary": "Lists the top 25 records ordering from newest to oldest.", "parameters": [ { - "type": "string", + "type": "integer", "description": "page number", "name": "page", - "in": "query" + "in": "query", + "required": true } ], "responses": { @@ -51,7 +49,7 @@ } } }, - "/v1/articles/by/sourceId": { + "/v1/articles/by/source/{id}": { "get": { "security": [ { @@ -70,7 +68,7 @@ "type": "string", "description": "source id", "name": "id", - "in": "query", + "in": "path", "required": true }, { @@ -102,7 +100,7 @@ } } }, - "/v1/articles/{ID}": { + "/v1/articles/{id}": { "get": { "security": [ { @@ -120,7 +118,7 @@ { "type": "string", "description": "int", - "name": "ID", + "name": "id", "in": "path", "required": true } @@ -147,7 +145,7 @@ } } }, - "/v1/articles/{ID}/details": { + "/v1/articles/{id}/details": { "get": { "security": [ { @@ -165,7 +163,7 @@ { "type": "string", "description": "int", - "name": "ID", + "name": "id", "in": "path", "required": true } @@ -336,7 +334,50 @@ } } }, - "/v1/discord/webhooks/{ID}": { + "/v1/discord/webhooks/{id}": { + "get": { + "security": [ + { + "Bearer": [] + } + ], + "produces": [ + "application/json" + ], + "tags": [ + "DiscordWebhook" + ], + "summary": "Returns the top 100 entries from the queue to be processed.", + "parameters": [ + { + "type": "integer", + "description": "id", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/domain.DiscordWebhookResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/domain.DiscordWebhookResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/domain.DiscordWebhookResponse" + } + } + } + }, "delete": { "security": [ { @@ -378,7 +419,7 @@ } } }, - "/v1/discord/webhooks/{ID}/disable": { + "/v1/discord/webhooks/{id}/disable": { "post": { "security": [ { @@ -420,7 +461,7 @@ } } }, - "/v1/discord/webhooks/{ID}/enable": { + "/v1/discord/webhooks/{id}/enable": { "post": { "security": [ { @@ -462,51 +503,6 @@ } } }, - "/v1/discord/webhooks/{id}": { - "get": { - "security": [ - { - "Bearer": [] - } - ], - "produces": [ - "application/json" - ], - "tags": [ - "DiscordWebhook" - ], - "summary": "Returns the top 100 entries from the queue to be processed.", - "parameters": [ - { - "type": "integer", - "description": "id", - "name": "id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/domain.DiscordWebhookResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/domain.DiscordWebhookResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/domain.DiscordWebhookResponse" - } - } - } - } - }, "/v1/sources": { "get": { "security": [ @@ -1503,13 +1499,5 @@ } } } - }, - "securityDefinitions": { - "Bearer": { - "description": "Type \"Bearer\" followed by a space and JWT token.", - "type": "apiKey", - "name": "Authorization", - "in": "header" - } } } \ No newline at end of file diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 973d9f4..8401f5d 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1,4 +1,3 @@ -basePath: /api definitions: domain.ArticleAndSourceModel: properties: @@ -154,8 +153,6 @@ definitions: type: object info: contact: {} - title: NewsBot collector - version: "0.1" paths: /v1/articles: get: @@ -163,7 +160,8 @@ paths: - description: page number in: query name: page - type: string + required: true + type: integer produces: - application/json responses: @@ -184,12 +182,12 @@ paths: summary: Lists the top 25 records ordering from newest to oldest. tags: - Articles - /v1/articles/{ID}: + /v1/articles/{id}: get: parameters: - description: int in: path - name: ID + name: id required: true type: string produces: @@ -212,12 +210,12 @@ paths: summary: Returns an article based on defined ID. tags: - Articles - /v1/articles/{ID}/details: + /v1/articles/{id}/details: get: parameters: - description: int in: path - name: ID + name: id required: true type: string produces: @@ -240,11 +238,11 @@ paths: summary: Returns an article and source based on defined ID. tags: - Articles - /v1/articles/by/sourceId: + /v1/articles/by/source/{id}: get: parameters: - description: source id - in: query + in: path name: id required: true type: string @@ -295,7 +293,7 @@ paths: summary: Returns the top 100 tags: - DiscordWebhook - /v1/discord/webhooks/{ID}: + /v1/discord/webhooks/{id}: delete: parameters: - description: id @@ -321,59 +319,6 @@ paths: summary: Deletes a record by ID. tags: - DiscordWebhook - /v1/discord/webhooks/{ID}/disable: - post: - parameters: - - description: id - in: path - name: id - required: true - type: integer - responses: - "200": - description: OK - schema: - $ref: '#/definitions/domain.DiscordWebhookResponse' - "400": - description: Bad Request - schema: - $ref: '#/definitions/domain.DiscordWebhookResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/domain.DiscordWebhookResponse' - security: - - Bearer: [] - summary: Disables a Webhook from being used. - tags: - - DiscordWebhook - /v1/discord/webhooks/{ID}/enable: - post: - parameters: - - description: id - in: path - name: id - required: true - type: integer - responses: - "200": - description: OK - schema: - $ref: '#/definitions/domain.DiscordWebhookResponse' - "400": - description: Bad Request - schema: - $ref: '#/definitions/domain.DiscordWebhookResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/domain.DiscordWebhookResponse' - security: - - Bearer: [] - summary: Enables a source to continue processing. - tags: - - DiscordWebhook - /v1/discord/webhooks/{id}: get: parameters: - description: id @@ -401,6 +346,58 @@ paths: summary: Returns the top 100 entries from the queue to be processed. tags: - DiscordWebhook + /v1/discord/webhooks/{id}/disable: + post: + parameters: + - description: id + in: path + name: id + required: true + type: integer + responses: + "200": + description: OK + schema: + $ref: '#/definitions/domain.DiscordWebhookResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/domain.DiscordWebhookResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/domain.DiscordWebhookResponse' + security: + - Bearer: [] + summary: Disables a Webhook from being used. + tags: + - DiscordWebhook + /v1/discord/webhooks/{id}/enable: + post: + parameters: + - description: id + in: path + name: id + required: true + type: integer + responses: + "200": + description: OK + schema: + $ref: '#/definitions/domain.DiscordWebhookResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/domain.DiscordWebhookResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/domain.DiscordWebhookResponse' + security: + - Bearer: [] + summary: Enables a source to continue processing. + tags: + - DiscordWebhook /v1/discord/webhooks/by/serverAndChannel: get: parameters: @@ -945,10 +942,4 @@ paths: summary: Adds a new scope to a user account tags: - Users -securityDefinitions: - Bearer: - description: Type "Bearer" followed by a space and JWT token. - in: header - name: Authorization - type: apiKey swagger: "2.0" diff --git a/internal/handler/v1/articles.go b/internal/handler/v1/articles.go index 9f086cd..e3fe7c5 100644 --- a/internal/handler/v1/articles.go +++ b/internal/handler/v1/articles.go @@ -10,15 +10,15 @@ import ( ) // ListArticles -// @Summary Lists the top 25 records ordering from newest to oldest. -// @Produce application/json -// @Param page query string false "page number" -// @Tags Articles -// @Router /v1/articles [get] -// @Success 200 {object} domain.ArticleResponse -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse -// @Security Bearer +// @Summary Lists the top 25 records ordering from newest to oldest. +// @Produce application/json +// @Param page query int true "page number" test +// @Tags Articles +// @Router /v1/articles [get] +// @Success 200 {object} domain.ArticleResponse +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse +// @Security Bearer func (s *Handler) listArticles(c echo.Context) error { resp := domain.ArticleResponse{ BaseResponse: domain.BaseResponse{ @@ -48,15 +48,15 @@ func (s *Handler) listArticles(c echo.Context) error { } // GetArticle -// @Summary Returns an article based on defined ID. -// @Param ID path string true "int" -// @Produce application/json -// @Tags Articles -// @Router /v1/articles/{ID} [get] -// @Success 200 {object} domain.ArticleResponse "OK" -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse -// @Security Bearer +// @Summary Returns an article based on defined ID. +// @Param id path string true "int" +// @Produce application/json +// @Tags Articles +// @Router /v1/articles/{id} [get] +// @Success 200 {object} domain.ArticleResponse "OK" +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse +// @Security Bearer func (s *Handler) getArticle(c echo.Context) error { p := domain.ArticleResponse{ BaseResponse: domain.BaseResponse{ @@ -90,15 +90,15 @@ func (s *Handler) getArticle(c echo.Context) error { } // GetArticleDetails -// @Summary Returns an article and source based on defined ID. -// @Param ID path string true "int" -// @Produce application/json -// @Tags Articles -// @Router /v1/articles/{ID}/details [get] -// @Success 200 {object} domain.ArticleDetailedResponse "OK" -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse -// @Security Bearer +// @Summary Returns an article and source based on defined ID. +// @Param id path string true "int" +// @Produce application/json +// @Tags Articles +// @Router /v1/articles/{id}/details [get] +// @Success 200 {object} domain.ArticleDetailedResponse "OK" +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse +// @Security Bearer func (s *Handler) getArticleDetails(c echo.Context) error { p := domain.ArticleDetailedResponse{ BaseResponse: domain.BaseResponse{ @@ -135,16 +135,16 @@ func (s *Handler) getArticleDetails(c echo.Context) error { } // ListArticlesBySourceID -// @Summary Finds the articles based on the SourceID provided. Returns the top 25. -// @Param id query string true "source id" -// @Param page query int false "Page to query" -// @Produce application/json -// @Tags Articles -// @Router /v1/articles/by/sourceId [get] -// @Success 200 {object} domain.ArticleResponse "OK" -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse -// @Security Bearer +// @Summary Finds the articles based on the SourceID provided. Returns the top 25. +// @Param id path string true "source id" +// @Param page query int false "Page to query" +// @Produce application/json +// @Tags Articles +// @Router /v1/articles/by/source/{id} [get] +// @Success 200 {object} domain.ArticleResponse "OK" +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse +// @Security Bearer func (s *Handler) ListArticlesBySourceId(c echo.Context) error { p := domain.ArticleResponse{ BaseResponse: domain.BaseResponse{ diff --git a/internal/handler/v1/discordwebhooks.go b/internal/handler/v1/discordwebhooks.go index 33abda2..03fece8 100644 --- a/internal/handler/v1/discordwebhooks.go +++ b/internal/handler/v1/discordwebhooks.go @@ -11,14 +11,14 @@ import ( ) // ListDiscordWebhooks -// @Summary Returns the top 100 -// @Produce application/json -// @Tags DiscordWebhook -// @Router /v1/discord/webhooks [get] -// @Success 200 {object} domain.DiscordWebhookResponse -// @Failure 400 {object} domain.DiscordWebhookResponse -// @Failure 500 {object} domain.DiscordWebhookResponse -// @Security Bearer +// @Summary Returns the top 100 +// @Produce application/json +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks [get] +// @Success 200 {object} domain.DiscordWebhookResponse +// @Failure 400 {object} domain.DiscordWebhookResponse +// @Failure 500 {object} domain.DiscordWebhookResponse +// @Security Bearer func (s *Handler) ListDiscordWebHooks(c echo.Context) error { p := domain.DiscordWebhookResponse{ BaseResponse: domain.BaseResponse{ @@ -43,15 +43,15 @@ func (s *Handler) ListDiscordWebHooks(c echo.Context) error { } // GetDiscordWebHook -// @Summary Returns the top 100 entries from the queue to be processed. -// @Produce application/json -// @Param id path int true "id" -// @Tags DiscordWebhook -// @Router /v1/discord/webhooks/{id} [get] -// @Success 200 {object} domain.DiscordWebhookResponse "OK" -// @Failure 400 {object} domain.DiscordWebhookResponse -// @Failure 500 {object} domain.DiscordWebhookResponse -// @Security Bearer +// @Summary Returns the top 100 entries from the queue to be processed. +// @Produce application/json +// @Param id path int true "id" +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{id} [get] +// @Success 200 {object} domain.DiscordWebhookResponse "OK" +// @Failure 400 {object} domain.DiscordWebhookResponse +// @Failure 500 {object} domain.DiscordWebhookResponse +// @Security Bearer func (s *Handler) GetDiscordWebHooksById(c echo.Context) error { p := domain.DiscordWebhookResponse{ BaseResponse: domain.BaseResponse{ @@ -83,16 +83,16 @@ func (s *Handler) GetDiscordWebHooksById(c echo.Context) error { } // GetDiscordWebHookByServerAndChannel -// @Summary Returns all the known web hooks based on the Server and Channel given. -// @Produce application/json -// @Param server query string true "Fancy Server" -// @Param channel query string true "memes" -// @Tags DiscordWebhook -// @Router /v1/discord/webhooks/by/serverAndChannel [get] -// @Success 200 {object} domain.DiscordWebhookResponse "OK" -// @Failure 400 {object} domain.DiscordWebhookResponse -// @Failure 500 {object} domain.DiscordWebhookResponse -// @Security Bearer +// @Summary Returns all the known web hooks based on the Server and Channel given. +// @Produce application/json +// @Param server query string true "Fancy Server" +// @Param channel query string true "memes" +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/by/serverAndChannel [get] +// @Success 200 {object} domain.DiscordWebhookResponse "OK" +// @Failure 400 {object} domain.DiscordWebhookResponse +// @Failure 500 {object} domain.DiscordWebhookResponse +// @Security Bearer func (s *Handler) GetDiscordWebHooksByServerAndChannel(c echo.Context) error { p := domain.DiscordWebhookResponse{ BaseResponse: domain.BaseResponse{ @@ -131,16 +131,16 @@ func (s *Handler) GetDiscordWebHooksByServerAndChannel(c echo.Context) error { } // NewDiscordWebHook -// @Summary Creates a new record for a discord web hook to post data to. -// @Param url query string true "url" -// @Param server query string true "Server name" -// @Param channel query string true "Channel name" -// @Tags DiscordWebhook -// @Router /v1/discord/webhooks/new [post] -// @Success 200 {object} domain.DiscordWebhookResponse "OK" -// @Failure 400 {object} domain.DiscordWebhookResponse -// @Failure 500 {object} domain.DiscordWebhookResponse -// @Security Bearer +// @Summary Creates a new record for a discord web hook to post data to. +// @Param url query string true "url" +// @Param server query string true "Server name" +// @Param channel query string true "Channel name" +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/new [post] +// @Success 200 {object} domain.DiscordWebhookResponse "OK" +// @Failure 400 {object} domain.DiscordWebhookResponse +// @Failure 500 {object} domain.DiscordWebhookResponse +// @Security Bearer func (s *Handler) NewDiscordWebHook(c echo.Context) error { p := domain.DiscordWebhookResponse{ BaseResponse: domain.BaseResponse{ @@ -208,14 +208,14 @@ func (s *Handler) NewDiscordWebHook(c echo.Context) error { } // DisableDiscordWebHooks -// @Summary Disables a Webhook from being used. -// @Param id path int true "id" -// @Tags DiscordWebhook -// @Router /v1/discord/webhooks/{ID}/disable [post] -// @Success 200 {object} domain.DiscordWebhookResponse "OK" -// @Failure 400 {object} domain.DiscordWebhookResponse -// @Failure 500 {object} domain.DiscordWebhookResponse -// @Security Bearer +// @Summary Disables a Webhook from being used. +// @Param id path int true "id" +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{id}/disable [post] +// @Success 200 {object} domain.DiscordWebhookResponse "OK" +// @Failure 400 {object} domain.DiscordWebhookResponse +// @Failure 500 {object} domain.DiscordWebhookResponse +// @Security Bearer func (s *Handler) disableDiscordWebHook(c echo.Context) error { p := domain.DiscordWebhookResponse{ BaseResponse: domain.BaseResponse{ @@ -276,14 +276,14 @@ func (s *Handler) disableDiscordWebHook(c echo.Context) error { } // EnableDiscordWebHook -// @Summary Enables a source to continue processing. -// @Param id path int true "id" -// @Tags DiscordWebhook -// @Router /v1/discord/webhooks/{ID}/enable [post] -// @Success 200 {object} domain.DiscordWebhookResponse "OK" -// @Failure 400 {object} domain.DiscordWebhookResponse -// @Failure 500 {object} domain.DiscordWebhookResponse -// @Security Bearer +// @Summary Enables a source to continue processing. +// @Param id path int true "id" +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{id}/enable [post] +// @Success 200 {object} domain.DiscordWebhookResponse "OK" +// @Failure 400 {object} domain.DiscordWebhookResponse +// @Failure 500 {object} domain.DiscordWebhookResponse +// @Security Bearer func (s *Handler) enableDiscordWebHook(c echo.Context) error { p := domain.DiscordWebhookResponse{ BaseResponse: domain.BaseResponse{ @@ -342,14 +342,14 @@ func (s *Handler) enableDiscordWebHook(c echo.Context) error { } // DeleteDiscordWebHook -// @Summary Deletes a record by ID. -// @Param id path string true "id" -// @Tags DiscordWebhook -// @Router /v1/discord/webhooks/{ID} [delete] -// @Success 200 {object} domain.DiscordWebhookResponse "OK" -// @Failure 400 {object} domain.DiscordWebhookResponse -// @Failure 500 {object} domain.DiscordWebhookResponse -// @Security Bearer +// @Summary Deletes a record by ID. +// @Param id path string true "id" +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{id} [delete] +// @Success 200 {object} domain.DiscordWebhookResponse "OK" +// @Failure 400 {object} domain.DiscordWebhookResponse +// @Failure 500 {object} domain.DiscordWebhookResponse +// @Security Bearer func (s *Handler) deleteDiscordWebHook(c echo.Context) error { p := domain.DiscordWebhookResponse{ BaseResponse: domain.BaseResponse{ @@ -409,13 +409,13 @@ 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 DiscordWebhook -// @Router /v1/discord/webhooks/{id} [patch] -// @Success 200 {object} domain.DiscordWebhookResponse "OK" -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse +// @Summary Updates a valid discord webhook ID based on the body given. +// @Param id path string true "id" +// @Tags DiscordWebhook +// @Router /v1/discord/webhooks/{id} [patch] +// @Success 200 {object} domain.DiscordWebhookResponse "OK" +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse //func (s *Handler) UpdateDiscordWebHook(c echo.Context) error { // id, err := strconv.Atoi(c.Param("ID")) // if err != nil { diff --git a/internal/handler/v1/sources.go b/internal/handler/v1/sources.go index 8ccc224..bc71d2b 100644 --- a/internal/handler/v1/sources.go +++ b/internal/handler/v1/sources.go @@ -8,18 +8,19 @@ import ( "git.jamestombleson.com/jtom38/newsbot-api/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/dtoconv" + "git.jamestombleson.com/jtom38/newsbot-api/internal/entity" "github.com/labstack/echo/v4" ) // ListSources -// @Summary Lists the top 50 records -// @Param page query string false "page number" -// @Produce application/json -// @Tags Source -// @Router /v1/sources [get] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse "Unable to reach SQL or Data problems" -// @Security Bearer +// @Summary Lists the top 50 records +// @Param page query string false "page number" +// @Produce application/json +// @Tags Source +// @Router /v1/sources [get] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse "Unable to reach SQL or Data problems" +// @Security Bearer func (s *Handler) listSources(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -52,16 +53,16 @@ func (s *Handler) listSources(c echo.Context) error { } // ListSourcesBySource -// @Summary Lists the top 50 records based on the name given. Example: reddit -// @Param source query string true "Source Name" -// @Param page query string false "page number" -// @Produce application/json -// @Tags Source -// @Router /v1/sources/by/source [get] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse -// @Failure 500 {object} domain.SourcesResponse -// @Security Bearer +// @Summary Lists the top 50 records based on the name given. Example: reddit +// @Param source query string true "Source Name" +// @Param page query string false "page number" +// @Produce application/json +// @Tags Source +// @Router /v1/sources/by/source [get] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse +// @Failure 500 {object} domain.SourcesResponse +// @Security Bearer func (s *Handler) listSourcesBySource(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -100,15 +101,15 @@ func (s *Handler) listSourcesBySource(c echo.Context) error { } // GetSource -// @Summary Returns a single entity by ID -// @Param id path int true "id" -// @Produce application/json -// @Tags Source -// @Router /v1/sources/{id} [get] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse -// @Failure 500 {object} domain.SourcesResponse -// @Security Bearer +// @Summary Returns a single entity by ID +// @Param id path int true "id" +// @Produce application/json +// @Tags Source +// @Router /v1/sources/{id} [get] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse +// @Failure 500 {object} domain.SourcesResponse +// @Security Bearer func (s *Handler) getSource(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -142,16 +143,16 @@ func (s *Handler) getSource(c echo.Context) error { } // GetSourceByNameAndSource -// @Summary Returns a single entity by ID -// @Param name query string true "dadjokes" -// @Param source query string true "reddit" -// @Produce application/json -// @Tags Source -// @Router /v1/sources/by/sourceAndName [get] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse -// @Security Bearer +// @Summary Returns a single entity by ID +// @Param name query string true "dadjokes" +// @Param source query string true "reddit" +// @Produce application/json +// @Tags Source +// @Router /v1/sources/by/sourceAndName [get] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse +// @Security Bearer func (s *Handler) GetSourceBySourceAndName(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -187,15 +188,15 @@ func (s *Handler) GetSourceBySourceAndName(c echo.Context) error { } // NewRedditSource -// @Summary Creates a new reddit source to monitor. -// @Param name query string true "name" -// @Param url query string true "url" -// @Tags Source -// @Router /v1/sources/new/reddit [post] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse -// @Failure 500 {object} domain.SourcesResponse -// @Security Bearer +// @Summary Creates a new reddit source to monitor. +// @Param name query string true "name" +// @Param url query string true "url" +// @Tags Source +// @Router /v1/sources/new/reddit [post] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse +// @Failure 500 {object} domain.SourcesResponse +// @Security Bearer func (s *Handler) newRedditSource(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -261,15 +262,15 @@ func (s *Handler) newRedditSource(c echo.Context) error { } // NewYoutubeSource -// @Summary Creates a new youtube source to monitor. -// @Param name query string true "name" -// @Param url query string true "url" -// @Tags Source -// @Router /v1/sources/new/youtube [post] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse -// @Failure 500 {object} domain.SourcesResponse -// @Security Bearer +// @Summary Creates a new youtube source to monitor. +// @Param name query string true "name" +// @Param url query string true "url" +// @Tags Source +// @Router /v1/sources/new/youtube [post] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse +// @Failure 500 {object} domain.SourcesResponse +// @Security Bearer func (s *Handler) newYoutubeSource(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -334,14 +335,14 @@ func (s *Handler) newYoutubeSource(c echo.Context) error { } // NewTwitchSource -// @Summary Creates a new twitch source to monitor. -// @Param name query string true "name" -// @Tags Source -// @Router /v1/sources/new/twitch [post] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse -// @Failure 500 {object} domain.SourcesResponse -// @Security Bearer +// @Summary Creates a new twitch source to monitor. +// @Param name query string true "name" +// @Tags Source +// @Router /v1/sources/new/twitch [post] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse +// @Failure 500 {object} domain.SourcesResponse +// @Security Bearer func (s *Handler) newTwitchSource(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -396,14 +397,14 @@ func (s *Handler) newTwitchSource(c echo.Context) error { } // NewRssSource -// @Summary Creates a new rss source to monitor. -// @Param request body domain.NewSourceParamRequest true "body" -// @Tags Source -// @Router /v1/sources/new/rss [post] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse -// @Failure 500 {object} domain.SourcesResponse -// @Security Bearer +// @Summary Creates a new rss source to monitor. +// @Param request body domain.NewSourceParamRequest true "body" +// @Tags Source +// @Router /v1/sources/new/rss [post] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse +// @Failure 500 {object} domain.SourcesResponse +// @Security Bearer func (s *Handler) newRssSource(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -419,7 +420,8 @@ func (s *Handler) newRssSource(c echo.Context) error { } param := domain.NewSourceParamRequest{} - err = (&echo.DefaultBinder{}).BindBody(c, ¶m) + err = c.Bind(¶m) + //err = (&echo.DefaultBinder{}).BindBody(c, ¶m) if err != nil { p.BaseResponse.Message = err.Error() return c.JSON(http.StatusBadRequest, p) @@ -431,8 +433,15 @@ func (s *Handler) newRssSource(c echo.Context) error { } // Check if the record already exists + blankRecord := entity.SourceEntity{} item, err := s.repo.Sources.GetBySourceAndName(c.Request().Context(), domain.SourceCollectorRss, param.Name) - if err == nil { + if err != nil { + p.IsError = true + return c.JSON(http.StatusInternalServerError, p) + } + + // No record was found, but no error returned + if item != blankRecord { var dto []domain.SourceDto dto = append(dto, dtoconv.SourceToDto(item)) p.Payload = dto @@ -440,6 +449,14 @@ func (s *Handler) newRssSource(c echo.Context) error { return c.JSON(http.StatusOK, p) } + //if err == nil { + // var dto []domain.SourceDto + // dto = append(dto, dtoconv.SourceToDto(item)) + // p.Payload = dto + // p.BaseResponse.IsError = false + // return c.JSON(http.StatusOK, p) + //} + tags := fmt.Sprintf("rss, %v, %s", param.Name, param.Tags) rows, err := s.repo.Sources.Create(c.Request().Context(), domain.SourceCollectorRss, param.Name, param.Url, tags, true) if err != nil { @@ -466,14 +483,14 @@ func (s *Handler) newRssSource(c echo.Context) error { } // DeleteSource -// @Summary Marks a source as deleted based on its ID value. -// @Param id path int true "id" -// @Tags Source -// @Router /v1/sources/{id} [POST] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse -// @Failure 500 {object} domain.SourcesResponse -// @Security Bearer +// @Summary Marks a source as deleted based on its ID value. +// @Param id path int true "id" +// @Tags Source +// @Router /v1/sources/{id} [POST] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse +// @Failure 500 {object} domain.SourcesResponse +// @Security Bearer func (s *Handler) deleteSources(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -526,14 +543,14 @@ func (s *Handler) deleteSources(c echo.Context) error { } // DisableSource -// @Summary Disables a source from processing. -// @Param id path int true "id" -// @Tags Source -// @Router /v1/sources/{id}/disable [post] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse -// @Failure 500 {object} domain.SourcesResponse -// @Security Bearer +// @Summary Disables a source from processing. +// @Param id path int true "id" +// @Tags Source +// @Router /v1/sources/{id}/disable [post] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse +// @Failure 500 {object} domain.SourcesResponse +// @Security Bearer func (s *Handler) disableSource(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ @@ -581,14 +598,14 @@ func (s *Handler) disableSource(c echo.Context) error { } // EnableSource -// @Summary Enables a source to continue processing. -// @Param id path string true "id" -// @Tags Source -// @Router /v1/sources/{id}/enable [post] -// @Success 200 {object} domain.SourcesResponse "ok" -// @Failure 400 {object} domain.SourcesResponse -// @Failure 500 {object} domain.SourcesResponse -// @Security Bearer +// @Summary Enables a source to continue processing. +// @Param id path string true "id" +// @Tags Source +// @Router /v1/sources/{id}/enable [post] +// @Success 200 {object} domain.SourcesResponse "ok" +// @Failure 400 {object} domain.SourcesResponse +// @Failure 500 {object} domain.SourcesResponse +// @Security Bearer func (s *Handler) enableSource(c echo.Context) error { p := domain.SourcesResponse{ BaseResponse: domain.BaseResponse{ diff --git a/internal/handler/v1/users.go b/internal/handler/v1/users.go index 44d0437..948c92b 100644 --- a/internal/handler/v1/users.go +++ b/internal/handler/v1/users.go @@ -17,15 +17,15 @@ const ( ErrUsernameAlreadyExists = "the requested username already exists" ) -// @Summary Creates a new user -// @Router /v1/users/register [post] -// @Param request formData domain.LoginFormRequest true "form" -// @Accepts x-www-form-urlencoded -// @Produce json -// @Tags Users -// @Success 201 {object} domain.BaseResponse -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse +// @Summary Creates a new user +// @Router /v1/users/register [post] +// @Param request formData domain.LoginFormRequest true "form" +// @Accepts x-www-form-urlencoded +// @Produce json +// @Tags Users +// @Success 201 {object} domain.BaseResponse +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse func (h *Handler) AuthRegister(c echo.Context) error { p := domain.BaseResponse{ Message: ResponseMessageSuccess, @@ -66,15 +66,15 @@ func (h *Handler) AuthRegister(c echo.Context) error { return c.JSON(http.StatusCreated, p) } -// @Summary Logs into the API and returns a bearer token if successful -// @Router /v1/users/login [post] -// @Param request formData domain.LoginFormRequest true "form" -// @Accepts x-www-form-urlencoded -// @Produce json -// @Tags Users -// @Success 200 {object} domain.LoginResponse -// @Failure 400 {object} domain.LoginResponse -// @Failure 500 {object} domain.LoginResponse +// @Summary Logs into the API and returns a bearer token if successful +// @Router /v1/users/login [post] +// @Param request formData domain.LoginFormRequest true "form" +// @Accepts x-www-form-urlencoded +// @Produce json +// @Tags Users +// @Success 200 {object} domain.LoginResponse +// @Failure 400 {object} domain.LoginResponse +// @Failure 500 {object} domain.LoginResponse func (h *Handler) AuthLogin(c echo.Context) error { p := domain.LoginResponse{ BaseResponse: domain.BaseResponse{ @@ -172,14 +172,14 @@ func (h *Handler) createAdminToken(c echo.Context, password string) error { // This will take collect some information about the requested refresh, validate and then return a new jwt token if approved. // Register -// @Summary Generates a new token -// @Router /v1/users/refresh/token [post] -// @Param request body domain.RefreshTokenRequest true "body" -// @Tags Users -// @Success 200 {object} domain.LoginResponse -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse -// @Security Bearer +// @Summary Generates a new token +// @Router /v1/users/refresh/token [post] +// @Param request body domain.RefreshTokenRequest true "body" +// @Tags Users +// @Success 200 {object} domain.LoginResponse +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse +// @Security Bearer func (h *Handler) RefreshJwtToken(c echo.Context) error { p := domain.LoginResponse{ BaseResponse: domain.BaseResponse{ @@ -235,16 +235,16 @@ func (h *Handler) RefreshJwtToken(c echo.Context) error { return c.JSON(http.StatusOK, p) } -// @Summary Adds a new scope to a user account -// @Router /v1/users/scopes/add [post] -// @Param request body domain.UpdateScopesRequest true "body" -// @Tags Users -// @Accept json -// @Produce json -// @Success 200 {object} domain.BaseResponse -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse -// @Security Bearer +// @Summary Adds a new scope to a user account +// @Router /v1/users/scopes/add [post] +// @Param request body domain.UpdateScopesRequest true "body" +// @Tags Users +// @Accept json +// @Produce json +// @Success 200 {object} domain.BaseResponse +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse +// @Security Bearer func (h *Handler) AddScopes(c echo.Context) error { p := domain.BaseResponse{ Message: ResponseMessageSuccess, @@ -274,16 +274,16 @@ func (h *Handler) AddScopes(c echo.Context) error { return c.JSON(http.StatusOK, p) } -// @Summary Adds a new scope to a user account -// @Router /v1/users/scopes/remove [post] -// @Param request body domain.UpdateScopesRequest true "body" -// @Tags Users -// @Accept json -// @Produce json -// @Success 200 {object} domain.BaseResponse -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse -// @Security Bearer +// @Summary Adds a new scope to a user account +// @Router /v1/users/scopes/remove [post] +// @Param request body domain.UpdateScopesRequest true "body" +// @Tags Users +// @Accept json +// @Produce json +// @Success 200 {object} domain.BaseResponse +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse +// @Security Bearer func (h *Handler) RemoveScopes(c echo.Context) error { p := domain.BaseResponse{ Message: ResponseMessageSuccess, @@ -319,15 +319,15 @@ func (h *Handler) RemoveScopes(c echo.Context) error { return c.JSON(http.StatusOK, p) } -// @Summary Revokes the current session token and replaces it with a new one. -// @Router /v1/users/refresh/sessionToken [post] -// @Tags Users -// @Accept json -// @Produce json -// @Success 200 {object} domain.BaseResponse -// @Failure 400 {object} domain.BaseResponse -// @Failure 500 {object} domain.BaseResponse -// @Security Bearer +// @Summary Revokes the current session token and replaces it with a new one. +// @Router /v1/users/refresh/sessionToken [post] +// @Tags Users +// @Accept json +// @Produce json +// @Success 200 {object} domain.BaseResponse +// @Failure 400 {object} domain.BaseResponse +// @Failure 500 {object} domain.BaseResponse +// @Security Bearer func (h *Handler) NewSessionToken(c echo.Context) error { p := domain.BaseResponse{ Message: ResponseMessageSuccess,