{ "schemes": [ "http", "https" ], "swagger": "2.0", "info": { "description": "A comprehensive Go API service with Swagger documentation", "title": "API Service", "termsOfService": "http://swagger.io/terms/", "contact": { "name": "API Support", "url": "http://www.swagger.io/support", "email": "support@swagger.io" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" }, "version": "1.0.0" }, "host": "localhost:8080", "basePath": "/api/v1", "paths": { "/": { "get": { "description": "Returns a hello world message", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "root" ], "summary": "Hello World endpoint", "responses": { "200": { "description": "Hello world message", "schema": { "$ref": "#/definitions/models.HelloWorldResponse" } } } } }, "/api/v1/auth/login": { "post": { "description": "Authenticate user with username and password to receive JWT token", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Login user and get JWT token", "parameters": [ { "description": "Login credentials", "name": "login", "in": "body", "required": true, "schema": { "$ref": "#/definitions/models.LoginRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TokenResponse" } }, "400": { "description": "Bad request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/me": { "get": { "security": [ { "Bearer": [] } ], "description": "Get information about the currently authenticated user", "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Get current user info", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.User" } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/refresh": { "post": { "description": "Refresh the JWT token using a valid refresh token", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Refresh JWT token", "parameters": [ { "description": "Refresh token", "name": "refresh", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": { "type": "string" } } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TokenResponse" } }, "400": { "description": "Bad request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/auth/register": { "post": { "description": "Register a new user account", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Register new user", "parameters": [ { "description": "Registration data", "name": "register", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": { "type": "string" } } } ], "responses": { "201": { "description": "Created", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "Bad request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/example": { "get": { "description": "Returns a simple message for GET request", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "example" ], "summary": "Example GET service", "responses": { "200": { "description": "Example GET response", "schema": { "$ref": "#/definitions/models.ExampleGetResponse" } } } }, "post": { "description": "Accepts a JSON payload and returns a response with an ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "example" ], "summary": "Example POST service", "parameters": [ { "description": "Example POST request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/models.ExamplePostRequest" } } ], "responses": { "200": { "description": "Example POST response", "schema": { "$ref": "#/definitions/models.ExamplePostResponse" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/models.ErrorResponse" } } } } }, "/api/v1/products": { "get": { "description": "Returns a list of products", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "product" ], "summary": "Get product", "responses": { "200": { "description": "Product GET response", "schema": { "$ref": "#/definitions/models.ProductGetResponse" } } } }, "post": { "description": "Creates a new product", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "product" ], "summary": "Create product", "parameters": [ { "description": "Product creation request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/models.ProductCreateRequest" } } ], "responses": { "201": { "description": "Product created successfully", "schema": { "$ref": "#/definitions/models.ProductCreateResponse" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/models.ErrorResponse" } } } } }, "/api/v1/products/{id}": { "get": { "description": "Returns a single product by ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "product" ], "summary": "Get product by ID", "parameters": [ { "type": "string", "description": "Product ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Product GET by ID response", "schema": { "$ref": "#/definitions/models.ProductGetByIDResponse" } }, "404": { "description": "Product not found", "schema": { "$ref": "#/definitions/models.ErrorResponse" } } } }, "put": { "description": "Updates an existing product", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "product" ], "summary": "Update product", "parameters": [ { "type": "string", "description": "Product ID", "name": "id", "in": "path", "required": true }, { "description": "Product update request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/models.ProductUpdateRequest" } } ], "responses": { "200": { "description": "Product updated successfully", "schema": { "$ref": "#/definitions/models.ProductUpdateResponse" } }, "400": { "description": "Bad request", "schema": { "$ref": "#/definitions/models.ErrorResponse" } }, "404": { "description": "Product not found", "schema": { "$ref": "#/definitions/models.ErrorResponse" } } } }, "delete": { "description": "Deletes a product by ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "product" ], "summary": "Delete product", "parameters": [ { "type": "string", "description": "Product ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "Product deleted successfully", "schema": { "$ref": "#/definitions/models.ProductDeleteResponse" } }, "404": { "description": "Product not found", "schema": { "$ref": "#/definitions/models.ErrorResponse" } } } } }, "/api/v1/token/generate": { "post": { "description": "Generate a JWT token for a user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Token" ], "summary": "Generate JWT token", "parameters": [ { "description": "User credentials", "name": "token", "in": "body", "required": true, "schema": { "$ref": "#/definitions/models.LoginRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TokenResponse" } }, "400": { "description": "Bad request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "401": { "description": "Unauthorized", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/token/generate-direct": { "post": { "description": "Generate a JWT token directly without password verification (for testing)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Token" ], "summary": "Generate token directly", "parameters": [ { "description": "User info", "name": "user", "in": "body", "required": true, "schema": { "type": "object", "additionalProperties": { "type": "string" } } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/models.TokenResponse" } }, "400": { "description": "Bad request", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/health": { "get": { "description": "Returns the health status of the API service", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "health" ], "summary": "Health check endpoint", "responses": { "200": { "description": "Health status", "schema": { "$ref": "#/definitions/models.HealthResponse" } }, "500": { "description": "Internal server error", "schema": { "$ref": "#/definitions/models.ErrorResponse" } } } } } }, "definitions": { "models.ErrorResponse": { "type": "object", "properties": { "code": { "type": "integer" }, "error": { "type": "string" }, "message": { "type": "string" } } }, "models.ExampleGetResponse": { "type": "object", "properties": { "message": { "type": "string" } } }, "models.ExamplePostRequest": { "type": "object", "required": [ "age", "name" ], "properties": { "age": { "type": "integer" }, "name": { "type": "string" } } }, "models.ExamplePostResponse": { "type": "object", "properties": { "id": { "type": "string" }, "message": { "type": "string" } } }, "models.HealthResponse": { "type": "object", "properties": { "details": { "type": "object", "additionalProperties": { "type": "string" } }, "status": { "type": "string" }, "timestamp": { "type": "string" } } }, "models.HelloWorldResponse": { "type": "object", "properties": { "message": { "type": "string" }, "version": { "type": "string" } } }, "models.LoginRequest": { "type": "object", "required": [ "password", "username" ], "properties": { "password": { "type": "string" }, "username": { "type": "string" } } }, "models.ProductCreateRequest": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string" } } }, "models.ProductCreateResponse": { "type": "object", "properties": { "data": {}, "id": { "type": "string" }, "message": { "type": "string" } } }, "models.ProductDeleteResponse": { "type": "object", "properties": { "id": { "type": "string" }, "message": { "type": "string" } } }, "models.ProductGetByIDResponse": { "type": "object", "properties": { "id": { "type": "string" }, "message": { "type": "string" } } }, "models.ProductGetResponse": { "type": "object", "properties": { "data": {}, "message": { "type": "string" } } }, "models.ProductUpdateRequest": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string" } } }, "models.ProductUpdateResponse": { "type": "object", "properties": { "data": {}, "id": { "type": "string" }, "message": { "type": "string" } } }, "models.TokenResponse": { "type": "object", "properties": { "access_token": { "type": "string" }, "expires_in": { "type": "integer" }, "token_type": { "type": "string" } } }, "models.User": { "type": "object", "properties": { "email": { "type": "string" }, "id": { "type": "string" }, "role": { "type": "string" }, "username": { "type": "string" } } } } }