Files

1318 lines
41 KiB
Go

// Package docs Code generated by swaggo/swag. DO NOT EDIT
package docs
import "github.com/swaggo/swag"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
"swagger": "2.0",
"info": {
"description": "{{escape .Description}}",
"title": "{{.Title}}",
"termsOfService": "http://swagger.io/terms/",
"contact": {
"name": "API Support",
"url": "http://www.swagger.io/support",
"email": "[email protected]"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "{{.Version}}"
},
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
"/admin/users": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Fetches all users",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"admin"
],
"summary": "Fetches all users",
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/store.User"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"404": {
"description": "Not Found",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/authentication/forgot-password": {
"post": {
"description": "Forgot Password",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"authentication"
],
"summary": "Forgot Password",
"parameters": [
{
"description": "User Credentials",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/main.ForgotPasswordPayload"
}
}
],
"responses": {
"201": {
"description": "Token Created",
"schema": {
"type": "string"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"401": {
"description": "Unauthorized",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/authentication/refresh": {
"post": {
"description": "Refresh a token for the user",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"authentication"
],
"summary": "Refresh a token",
"parameters": [
{
"type": "string",
"description": "Refresh Token",
"name": "Authorization",
"in": "header",
"required": true
}
],
"responses": {
"201": {
"description": "Token Created",
"schema": {
"type": "string"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"401": {
"description": "Unauthorized",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/authentication/register": {
"post": {
"description": "Register a new User",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"authentication"
],
"summary": "Register a new User",
"parameters": [
{
"description": "User Credentials",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/main.RegisterUserPayload"
}
}
],
"responses": {
"201": {
"description": "User Registered",
"schema": {
"$ref": "#/definitions/main.UserWithToken"
}
},
"400": {
"description": "User payload error",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/authentication/token": {
"post": {
"description": "Create a new token for the user",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"authentication"
],
"summary": "Create a new token",
"parameters": [
{
"description": "User Credentials",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/main.CredentialsPayload"
}
}
],
"responses": {
"201": {
"description": "Token Created",
"schema": {
"type": "string"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"401": {
"description": "Unauthorized",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/health": {
"get": {
"description": "Health Check",
"tags": [
"ops"
],
"summary": "Health Check",
"responses": {
"204": {
"description": "ok",
"schema": {
"type": "string"
}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/posts": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Creates a new Post",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"posts"
],
"summary": "Creates a new Post",
"parameters": [
{
"description": "Post Payload",
"name": "in",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/main.CreatePostPayload"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/store.Post"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"404": {
"description": "Not Found",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/posts/{id}": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Fetches a Post by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"posts"
],
"summary": "Fetches a Post",
"parameters": [
{
"type": "integer",
"description": "Post ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/store.Post"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"404": {
"description": "Not Found",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
},
"delete": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Deletse a Post by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"posts"
],
"summary": "Deletes a Post",
"parameters": [
{
"type": "integer",
"description": "Post ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"204": {
"description": "No Content",
"schema": {
"type": "string"
}
},
"404": {
"description": "Not Found",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
},
"patch": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Update a Post by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"posts"
],
"summary": "Update a Post",
"parameters": [
{
"type": "integer",
"description": "Post ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "Post Payload",
"name": "in",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/main.UpdatePostPayload"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/store.Post"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"404": {
"description": "Not Found",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/posts/{id}/comments": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Creates a new Comment",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"comments"
],
"summary": "Creates a new Comment",
"parameters": [
{
"type": "integer",
"description": "Post ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/store.Comment"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"404": {
"description": "Not Found",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/users/activate/{token}": {
"put": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Activate/Register a user by invitation token",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"users"
],
"summary": "Activate/Register a user",
"parameters": [
{
"type": "string",
"description": "Invitation Token",
"name": "token",
"in": "path",
"required": true
}
],
"responses": {
"204": {
"description": "User activated",
"schema": {
"type": "string"
}
},
"404": {
"description": "User not found",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/users/feed": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Fetches the user feed",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"feed"
],
"summary": "Fetches the user feed",
"parameters": [
{
"type": "integer",
"description": "Limit",
"name": "limit",
"in": "query"
},
{
"type": "integer",
"description": "Offset",
"name": "offset",
"in": "query"
},
{
"type": "string",
"description": "Sort",
"name": "sort",
"in": "query"
},
{
"type": "string",
"description": "Tags",
"name": "tags",
"in": "query"
},
{
"type": "string",
"description": "Search",
"name": "search",
"in": "query"
},
{
"type": "string",
"description": "Since",
"name": "since",
"in": "query"
},
{
"type": "string",
"description": "Until",
"name": "until",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/store.PostWithMetadata"
}
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/users/reset-password/{token}": {
"put": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Reset user password with verification",
"consumes": [
"application/json"
],
"tags": [
"users"
],
"summary": "Reset user password",
"parameters": [
{
"description": "Reset Password",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/main.resetPasswordPayload"
}
},
{
"type": "string",
"description": "Reset Password Token",
"name": "token",
"in": "path",
"required": true
}
],
"responses": {
"204": {
"description": "Password reset successfully",
"schema": {
"type": "string"
}
},
"400": {
"description": "Invalid request",
"schema": {}
},
"401": {
"description": "Unauthorized",
"schema": {}
},
"500": {
"description": "Internal server error",
"schema": {}
}
}
}
},
"/users/{id}": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Fetches a user Profile by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"users"
],
"summary": "Fetches a user Profile",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/store.User"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"404": {
"description": "Not Found",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
},
"patch": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Update a user Profile by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"users"
],
"summary": "Update a user Profile",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "User Profile",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/main.updateUserPayload"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/store.User"
}
},
"400": {
"description": "Bad Request",
"schema": {}
},
"404": {
"description": "Not Found",
"schema": {}
},
"500": {
"description": "Internal Server Error",
"schema": {}
}
}
}
},
"/users/{id}/follow": {
"put": {
"description": "Follows a user by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"users"
],
"summary": "Follows a user",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"204": {
"description": "User followed",
"schema": {
"type": "string"
}
},
"400": {
"description": "User not found",
"schema": {}
}
}
}
},
"/users/{id}/password": {
"patch": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Update user password with verification\nPassword must:\n- Be at least 8 characters long\n- Contain at least one uppercase letter\n- Contain at least one lowercase letter\n- Contain at least one number\n- Contain at least one special character\n- Be different from the current password",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"users"
],
"summary": "Update user password",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "Password Update",
"name": "payload",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/main.updateUserPasswordPayload"
}
}
],
"responses": {
"204": {
"description": "Password updated successfully",
"schema": {
"type": "string"
}
},
"400": {
"description": "Invalid request",
"schema": {}
},
"401": {
"description": "Unauthorized",
"schema": {}
},
"404": {
"description": "User not found",
"schema": {}
},
"500": {
"description": "Internal server error",
"schema": {}
}
}
}
},
"/users/{id}/unfollow": {
"put": {
"description": "Unfollows a user by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"users"
],
"summary": "Unfollows a user",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"204": {
"description": "User unfollowed",
"schema": {
"type": "string"
}
},
"400": {
"description": "User payload error",
"schema": {}
},
"404": {
"description": "User not found",
"schema": {}
}
}
}
}
},
"definitions": {
"main.CreatePostPayload": {
"type": "object",
"required": [
"content",
"title"
],
"properties": {
"content": {
"type": "string",
"maxLength": 1000
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string",
"maxLength": 100
}
}
},
"main.CredentialsPayload": {
"type": "object",
"required": [
"email",
"password"
],
"properties": {
"email": {
"type": "string",
"maxLength": 255
},
"password": {
"type": "string",
"maxLength": 72,
"minLength": 3
}
}
},
"main.ForgotPasswordPayload": {
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"maxLength": 255
}
}
},
"main.RegisterUserPayload": {
"type": "object",
"required": [
"email",
"first_name",
"last_name",
"password",
"username"
],
"properties": {
"email": {
"type": "string",
"maxLength": 255
},
"first_name": {
"type": "string",
"maxLength": 100
},
"last_name": {
"type": "string",
"maxLength": 100
},
"password": {
"type": "string"
},
"username": {
"type": "string",
"maxLength": 100
}
}
},
"main.UpdatePostPayload": {
"type": "object",
"properties": {
"content": {
"type": "string",
"maxLength": 1000
},
"title": {
"type": "string",
"maxLength": 100
}
}
},
"main.UserWithToken": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"email": {
"type": "string"
},
"first_name": {
"type": "string"
},
"id": {
"type": "integer"
},
"is_active": {
"type": "boolean"
},
"last_name": {
"type": "string"
},
"role": {
"$ref": "#/definitions/store.Role"
},
"role_id": {
"type": "integer"
},
"token": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"username": {
"type": "string"
}
}
},
"main.resetPasswordPayload": {
"type": "object",
"required": [
"new_password",
"new_password_confirmation"
],
"properties": {
"new_password": {
"type": "string"
},
"new_password_confirmation": {
"type": "string"
}
}
},
"main.updateUserPasswordPayload": {
"type": "object",
"required": [
"current_password",
"new_password"
],
"properties": {
"current_password": {
"type": "string"
},
"new_password": {
"type": "string"
}
}
},
"main.updateUserPayload": {
"type": "object",
"properties": {
"email": {
"type": "string",
"maxLength": 255
},
"first_name": {
"type": "string",
"maxLength": 100
},
"last_name": {
"type": "string",
"maxLength": 100
},
"username": {
"type": "string",
"maxLength": 100
}
}
},
"store.Comment": {
"type": "object",
"properties": {
"content": {
"type": "string"
},
"created_at": {
"type": "string"
},
"id": {
"type": "integer"
},
"post_id": {
"type": "integer"
},
"updated_at": {
"type": "string"
},
"user": {
"$ref": "#/definitions/store.User"
},
"user_id": {
"type": "integer"
}
}
},
"store.Post": {
"type": "object",
"properties": {
"comments": {
"type": "array",
"items": {
"$ref": "#/definitions/store.Comment"
}
},
"content": {
"type": "string"
},
"created_at": {
"type": "string"
},
"id": {
"type": "integer"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"user": {
"$ref": "#/definitions/store.User"
},
"user_id": {
"type": "integer"
},
"version": {
"type": "integer"
}
}
},
"store.PostWithMetadata": {
"type": "object",
"properties": {
"comment_count": {
"type": "integer"
},
"comments": {
"type": "array",
"items": {
"$ref": "#/definitions/store.Comment"
}
},
"content": {
"type": "string"
},
"created_at": {
"type": "string"
},
"id": {
"type": "integer"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"user": {
"$ref": "#/definitions/store.User"
},
"user_id": {
"type": "integer"
},
"version": {
"type": "integer"
}
}
},
"store.Role": {
"type": "object",
"properties": {
"description": {
"type": "string"
},
"id": {
"type": "integer"
},
"level": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"store.User": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"email": {
"type": "string"
},
"first_name": {
"type": "string"
},
"id": {
"type": "integer"
},
"is_active": {
"type": "boolean"
},
"last_name": {
"type": "string"
},
"role": {
"$ref": "#/definitions/store.Role"
},
"role_id": {
"type": "integer"
},
"updated_at": {
"type": "string"
},
"username": {
"type": "string"
}
}
}
},
"securityDefinitions": {
"ApiKeyAuth": {
"type": "apiKey",
"name": "Authorization",
"in": "header"
}
}
}`
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{
Version: "",
Host: "",
BasePath: "/v1",
Schemes: []string{},
Title: "LK API Template",
Description: "This is a template for building APIs with Go, Chi, and Swagger.",
InfoInstanceName: "swagger",
SwaggerTemplate: docTemplate,
LeftDelim: "{{",
RightDelim: "}}",
}
func init() {
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
}