{ "swagger": "2.0", "info": { "title": "NewsBot collector", "contact": {}, "version": "0.1" }, "basePath": "/api", "paths": { "/v1/articles": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Articles" ], "summary": "Lists the top 25 records ordering from newest to oldest.", "parameters": [ { "type": "string", "description": "page number", "name": "page", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.ArticleResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } }, "/v1/articles/by/sourceId": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Articles" ], "summary": "Finds the articles based on the SourceID provided. Returns the top 25.", "parameters": [ { "type": "string", "description": "source id", "name": "id", "in": "query", "required": true }, { "type": "integer", "description": "Page to query", "name": "page", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.ArticleResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } }, "/v1/articles/{ID}": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Articles" ], "summary": "Returns an article based on defined ID.", "parameters": [ { "type": "string", "description": "int", "name": "ID", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.ArticleResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } }, "/v1/articles/{ID}/details": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Articles" ], "summary": "Returns an article and source based on defined ID.", "parameters": [ { "type": "string", "description": "int", "name": "ID", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.ArticleDetailedResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } }, "/v1/discord/webhooks": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "DiscordWebhook" ], "summary": "Returns the top 100", "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/discord/webhooks/by/serverAndChannel": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "DiscordWebhook" ], "summary": "Returns all the known web hooks based on the Server and Channel given.", "parameters": [ { "type": "string", "description": "Fancy Server", "name": "server", "in": "query", "required": true }, { "type": "string", "description": "memes", "name": "channel", "in": "query", "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/discord/webhooks/new": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "DiscordWebhook" ], "summary": "Creates a new record for a discord web hook to post data to.", "parameters": [ { "type": "string", "description": "url", "name": "url", "in": "query", "required": true }, { "type": "string", "description": "Server name", "name": "server", "in": "query", "required": true }, { "type": "string", "description": "Channel name", "name": "channel", "in": "query", "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/discord/webhooks/{ID}": { "delete": { "security": [ { "Bearer": [] } ], "tags": [ "DiscordWebhook" ], "summary": "Deletes a record by ID.", "parameters": [ { "type": "string", "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/discord/webhooks/{ID}/disable": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "DiscordWebhook" ], "summary": "Disables a Webhook from being used.", "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/discord/webhooks/{ID}/enable": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "DiscordWebhook" ], "summary": "Enables a source to continue processing.", "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/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": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Source" ], "summary": "Lists the top 50 records", "parameters": [ { "type": "string", "description": "page number", "name": "page", "in": "query" } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Unable to reach SQL or Data problems", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } } }, "/v1/sources/by/source": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Source" ], "summary": "Lists the top 50 records based on the name given. Example: reddit", "parameters": [ { "type": "string", "description": "Source Name", "name": "source", "in": "query", "required": true }, { "type": "string", "description": "page number", "name": "page", "in": "query" } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } } }, "/v1/sources/by/sourceAndName": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Source" ], "summary": "Returns a single entity by ID", "parameters": [ { "type": "string", "description": "dadjokes", "name": "name", "in": "query", "required": true }, { "type": "string", "description": "reddit", "name": "source", "in": "query", "required": true } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } }, "/v1/sources/new/reddit": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "Source" ], "summary": "Creates a new reddit source to monitor.", "parameters": [ { "type": "string", "description": "name", "name": "name", "in": "query", "required": true }, { "type": "string", "description": "url", "name": "url", "in": "query", "required": true } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } } }, "/v1/sources/new/rss": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "Source" ], "summary": "Creates a new rss source to monitor.", "parameters": [ { "type": "string", "description": "Site Name", "name": "name", "in": "query", "required": true }, { "type": "string", "description": "RSS Url", "name": "url", "in": "query", "required": true } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } } }, "/v1/sources/new/twitch": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "Source" ], "summary": "Creates a new twitch source to monitor.", "parameters": [ { "type": "string", "description": "name", "name": "name", "in": "query", "required": true } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } } }, "/v1/sources/new/youtube": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "Source" ], "summary": "Creates a new youtube source to monitor.", "parameters": [ { "type": "string", "description": "name", "name": "name", "in": "query", "required": true }, { "type": "string", "description": "url", "name": "url", "in": "query", "required": true } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } } }, "/v1/sources/{id}": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Source" ], "summary": "Returns a single entity by ID", "parameters": [ { "type": "integer", "description": "uuid", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } }, "post": { "security": [ { "Bearer": [] } ], "tags": [ "Source" ], "summary": "Marks a source as deleted based on its ID value.", "parameters": [ { "type": "integer", "description": "id", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } } }, "/v1/sources/{id}/disable": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "Source" ], "summary": "Disables a source from processing.", "parameters": [ { "type": "integer", "description": "id", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } } }, "/v1/sources/{id}/enable": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "Source" ], "summary": "Enables a source to continue processing.", "parameters": [ { "type": "string", "description": "id", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "ok", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.SourcesResponse" } } } } }, "/v1/users/login": { "post": { "produces": [ "application/json" ], "tags": [ "Users" ], "summary": "Logs into the API and returns a bearer token if successful", "parameters": [ { "type": "string", "name": "password", "in": "formData" }, { "type": "string", "name": "username", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.LoginResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.LoginResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.LoginResponse" } } } } }, "/v1/users/refresh/sessionToken": { "post": { "security": [ { "Bearer": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Users" ], "summary": "Revokes the current session token and replaces it with a new one.", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } }, "/v1/users/refresh/token": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "Users" ], "summary": "Generates a new token", "parameters": [ { "description": "body", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.RefreshTokenRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.LoginResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } }, "/v1/users/register": { "post": { "produces": [ "application/json" ], "tags": [ "Users" ], "summary": "Creates a new user", "parameters": [ { "type": "string", "name": "password", "in": "formData" }, { "type": "string", "name": "username", "in": "formData" } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } }, "/v1/users/scopes/add": { "post": { "security": [ { "Bearer": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Users" ], "summary": "Adds a new scope to a user account", "parameters": [ { "description": "body", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.UpdateScopesRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } }, "/v1/users/scopes/remove": { "post": { "security": [ { "Bearer": [] } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Users" ], "summary": "Adds a new scope to a user account", "parameters": [ { "description": "body", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.UpdateScopesRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.BaseResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.BaseResponse" } } } } } }, "definitions": { "domain.ArticleAndSourceModel": { "type": "object", "properties": { "article": { "$ref": "#/definitions/domain.ArticleDto" }, "source": { "$ref": "#/definitions/domain.SourceDto" } } }, "domain.ArticleDetailedResponse": { "type": "object", "properties": { "isError": { "type": "boolean" }, "message": { "type": "string" }, "payload": { "$ref": "#/definitions/domain.ArticleAndSourceModel" } } }, "domain.ArticleDto": { "type": "object", "properties": { "authorImage": { "type": "string" }, "authorName": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "integer" }, "isVideo": { "type": "boolean" }, "pubDate": { "type": "string" }, "sourceId": { "type": "integer" }, "tags": { "type": "string" }, "thumbnail": { "type": "string" }, "title": { "type": "string" }, "url": { "type": "string" } } }, "domain.ArticleResponse": { "type": "object", "properties": { "isError": { "type": "boolean" }, "message": { "type": "string" }, "payload": { "type": "array", "items": { "$ref": "#/definitions/domain.ArticleDto" } } } }, "domain.BaseResponse": { "type": "object", "properties": { "isError": { "type": "boolean" }, "message": { "type": "string" } } }, "domain.DiscordWebHookDto": { "type": "object", "properties": { "channel": { "type": "string" }, "enabled": { "type": "boolean" }, "id": { "type": "integer" }, "server": { "type": "string" }, "url": { "description": "Name string `json:\"name\"`\nKey string `json:\"key\"`", "type": "string" } } }, "domain.DiscordWebhookResponse": { "type": "object", "properties": { "isError": { "type": "boolean" }, "message": { "type": "string" }, "payload": { "type": "array", "items": { "$ref": "#/definitions/domain.DiscordWebHookDto" } } } }, "domain.LoginResponse": { "type": "object", "properties": { "isError": { "type": "boolean" }, "message": { "type": "string" }, "refreshToken": { "type": "string" }, "token": { "type": "string" }, "type": { "type": "string" } } }, "domain.RefreshTokenRequest": { "type": "object", "properties": { "refreshToken": { "type": "string" }, "username": { "type": "string" } } }, "domain.SourceDto": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "id": { "type": "integer" }, "name": { "type": "string" }, "source": { "type": "string" }, "tags": { "type": "string" }, "url": { "type": "string" } } }, "domain.SourcesResponse": { "type": "object", "properties": { "isError": { "type": "boolean" }, "message": { "type": "string" }, "payload": { "type": "array", "items": { "$ref": "#/definitions/domain.SourceDto" } } } }, "domain.UpdateScopesRequest": { "type": "object", "required": [ "scopes" ], "properties": { "scopes": { "type": "array", "items": { "type": "string" } }, "username": { "type": "string" } } } }, "securityDefinitions": { "Bearer": { "description": "Type \"Bearer\" followed by a space and JWT token.", "type": "apiKey", "name": "Authorization", "in": "header" } } }