basePath: /v1 definitions: main.CreatePostPayload: properties: content: maxLength: 1000 type: string tags: items: type: string type: array title: maxLength: 100 type: string required: - content - title type: object main.CredentialsPayload: properties: email: maxLength: 255 type: string password: maxLength: 72 minLength: 3 type: string required: - email - password type: object main.ForgotPasswordPayload: properties: email: maxLength: 255 type: string required: - email type: object main.RegisterUserPayload: properties: email: maxLength: 255 type: string first_name: maxLength: 100 type: string last_name: maxLength: 100 type: string password: type: string username: maxLength: 100 type: string required: - email - first_name - last_name - password - username type: object main.UpdatePostPayload: properties: content: maxLength: 1000 type: string title: maxLength: 100 type: string type: object main.UserWithToken: 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 type: object main.resetPasswordPayload: properties: new_password: type: string new_password_confirmation: type: string required: - new_password - new_password_confirmation type: object main.updateUserPasswordPayload: properties: current_password: type: string new_password: type: string required: - current_password - new_password type: object main.updateUserPayload: properties: email: maxLength: 255 type: string first_name: maxLength: 100 type: string last_name: maxLength: 100 type: string username: maxLength: 100 type: string type: object store.Comment: 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 type: object store.Post: properties: comments: items: $ref: '#/definitions/store.Comment' type: array content: type: string created_at: type: string id: type: integer tags: items: type: string type: array title: type: string updated_at: type: string user: $ref: '#/definitions/store.User' user_id: type: integer version: type: integer type: object store.PostWithMetadata: properties: comment_count: type: integer comments: items: $ref: '#/definitions/store.Comment' type: array content: type: string created_at: type: string id: type: integer tags: items: type: string type: array title: type: string updated_at: type: string user: $ref: '#/definitions/store.User' user_id: type: integer version: type: integer type: object store.Role: properties: description: type: string id: type: integer level: type: integer name: type: string type: object store.User: 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 type: object info: contact: email: support@swagger.io name: API Support url: http://www.swagger.io/support description: This is a template for building APIs with Go, Chi, and Swagger. license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html termsOfService: http://swagger.io/terms/ title: LK API Template paths: /admin/users: get: consumes: - application/json description: Fetches all users produces: - application/json 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: {} security: - ApiKeyAuth: [] summary: Fetches all users tags: - admin /authentication/forgot-password: post: consumes: - application/json description: Forgot Password parameters: - description: User Credentials in: body name: payload required: true schema: $ref: '#/definitions/main.ForgotPasswordPayload' produces: - application/json responses: "201": description: Token Created schema: type: string "400": description: Bad Request schema: {} "401": description: Unauthorized schema: {} "500": description: Internal Server Error schema: {} summary: Forgot Password tags: - authentication /authentication/refresh: post: consumes: - application/json description: Refresh a token for the user parameters: - description: Refresh Token in: header name: Authorization required: true type: string produces: - application/json responses: "201": description: Token Created schema: type: string "400": description: Bad Request schema: {} "401": description: Unauthorized schema: {} "500": description: Internal Server Error schema: {} summary: Refresh a token tags: - authentication /authentication/register: post: consumes: - application/json description: Register a new User parameters: - description: User Credentials in: body name: payload required: true schema: $ref: '#/definitions/main.RegisterUserPayload' produces: - application/json responses: "201": description: User Registered schema: $ref: '#/definitions/main.UserWithToken' "400": description: User payload error schema: {} "500": description: Internal Server Error schema: {} summary: Register a new User tags: - authentication /authentication/token: post: consumes: - application/json description: Create a new token for the user parameters: - description: User Credentials in: body name: payload required: true schema: $ref: '#/definitions/main.CredentialsPayload' produces: - application/json responses: "201": description: Token Created schema: type: string "400": description: Bad Request schema: {} "401": description: Unauthorized schema: {} "500": description: Internal Server Error schema: {} summary: Create a new token tags: - authentication /health: get: description: Health Check responses: "204": description: ok schema: type: string "500": description: Internal Server Error schema: {} summary: Health Check tags: - ops /posts: post: consumes: - application/json description: Creates a new Post parameters: - description: Post Payload in: body name: in required: true schema: $ref: '#/definitions/main.CreatePostPayload' produces: - application/json 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: {} security: - ApiKeyAuth: [] summary: Creates a new Post tags: - posts /posts/{id}: delete: consumes: - application/json description: Deletse a Post by ID parameters: - description: Post ID in: path name: id required: true type: integer produces: - application/json responses: "204": description: No Content schema: type: string "404": description: Not Found schema: {} "500": description: Internal Server Error schema: {} security: - ApiKeyAuth: [] summary: Deletes a Post tags: - posts get: consumes: - application/json description: Fetches a Post by ID parameters: - description: Post ID in: path name: id required: true type: integer produces: - application/json 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: {} security: - ApiKeyAuth: [] summary: Fetches a Post tags: - posts patch: consumes: - application/json description: Update a Post by ID parameters: - description: Post ID in: path name: id required: true type: integer - description: Post Payload in: body name: in required: true schema: $ref: '#/definitions/main.UpdatePostPayload' produces: - application/json 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: {} security: - ApiKeyAuth: [] summary: Update a Post tags: - posts /posts/{id}/comments: post: consumes: - application/json description: Creates a new Comment parameters: - description: Post ID in: path name: id required: true type: integer produces: - application/json 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: {} security: - ApiKeyAuth: [] summary: Creates a new Comment tags: - comments /users/{id}: get: consumes: - application/json description: Fetches a user Profile by ID parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json 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: {} security: - ApiKeyAuth: [] summary: Fetches a user Profile tags: - users patch: consumes: - application/json description: Update a user Profile by ID parameters: - description: User ID in: path name: id required: true type: integer - description: User Profile in: body name: payload required: true schema: $ref: '#/definitions/main.updateUserPayload' produces: - application/json 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: {} security: - ApiKeyAuth: [] summary: Update a user Profile tags: - users /users/{id}/follow: put: consumes: - application/json description: Follows a user by ID parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "204": description: User followed schema: type: string "400": description: User not found schema: {} summary: Follows a user tags: - users /users/{id}/password: patch: consumes: - application/json description: |- Update user password with verification Password must: - Be at least 8 characters long - Contain at least one uppercase letter - Contain at least one lowercase letter - Contain at least one number - Contain at least one special character - Be different from the current password parameters: - description: User ID in: path name: id required: true type: integer - description: Password Update in: body name: payload required: true schema: $ref: '#/definitions/main.updateUserPasswordPayload' produces: - application/json 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: {} security: - ApiKeyAuth: [] summary: Update user password tags: - users /users/{id}/unfollow: put: consumes: - application/json description: Unfollows a user by ID parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "204": description: User unfollowed schema: type: string "400": description: User payload error schema: {} "404": description: User not found schema: {} summary: Unfollows a user tags: - users /users/activate/{token}: put: consumes: - application/json description: Activate/Register a user by invitation token parameters: - description: Invitation Token in: path name: token required: true type: string produces: - application/json responses: "204": description: User activated schema: type: string "404": description: User not found schema: {} "500": description: Internal Server Error schema: {} security: - ApiKeyAuth: [] summary: Activate/Register a user tags: - users /users/feed: get: consumes: - application/json description: Fetches the user feed parameters: - description: Limit in: query name: limit type: integer - description: Offset in: query name: offset type: integer - description: Sort in: query name: sort type: string - description: Tags in: query name: tags type: string - description: Search in: query name: search type: string - description: Since in: query name: since type: string - description: Until in: query name: until type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/store.PostWithMetadata' type: array "400": description: Bad Request schema: {} "500": description: Internal Server Error schema: {} security: - ApiKeyAuth: [] summary: Fetches the user feed tags: - feed /users/reset-password/{token}: put: consumes: - application/json description: Reset user password with verification parameters: - description: Reset Password in: body name: payload required: true schema: $ref: '#/definitions/main.resetPasswordPayload' - description: Reset Password Token in: path name: token required: true type: string responses: "204": description: Password reset successfully schema: type: string "400": description: Invalid request schema: {} "401": description: Unauthorized schema: {} "500": description: Internal server error schema: {} security: - ApiKeyAuth: [] summary: Reset user password tags: - users securityDefinitions: ApiKeyAuth: in: header name: Authorization type: apiKey swagger: "2.0"