From f84b744aff8c9eff7c29c44795363a35ddd38982 Mon Sep 17 00:00:00 2001 From: LightJack05 <66321084+LightJack05@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:27:33 +0100 Subject: [PATCH 1/4] Make response types static --- internal/handlers/product/get.go | 6 +++++- internal/handlers/product/getId.go | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/handlers/product/get.go b/internal/handlers/product/get.go index e5bdee8..dd906a5 100644 --- a/internal/handlers/product/get.go +++ b/internal/handlers/product/get.go @@ -10,6 +10,10 @@ import ( "github.com/gin-gonic/gin" ) +type productGetResponse struct { + Products []product.Product `json:"products"` +} + // Get godoc // @Summary Search products // @Description Search for products by name @@ -57,5 +61,5 @@ func (p *ProductController) Get(c *gin.Context) { return } - c.JSON(http.StatusOK, gin.H{"products": products}) + c.JSON(http.StatusOK, productGetResponse{Products: *products}) } diff --git a/internal/handlers/product/getId.go b/internal/handlers/product/getId.go index 1e768f0..c01e2d3 100644 --- a/internal/handlers/product/getId.go +++ b/internal/handlers/product/getId.go @@ -9,6 +9,10 @@ import ( "github.com/gin-gonic/gin" ) +type getProductByIdResponse struct { + Product product.Product `json:"product"` +} + // GetID godoc // @Summary Get product by ID // @Description Get a single product by its ID @@ -42,5 +46,5 @@ func (p *ProductController) GetID(c *gin.Context) { return } - c.JSON(http.StatusOK, gin.H{"product": product}) + c.JSON(http.StatusOK, getProductByIdResponse{Product: *product}) } From dc13ba267b45fc9836361f9d94b19d32ca127f92 Mon Sep 17 00:00:00 2001 From: LightJack05 <66321084+LightJack05@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:27:56 +0100 Subject: [PATCH 2/4] Update swagger docs --- docs/docs.go | 43 +++++++++++++++---------------------------- docs/swagger.json | 43 +++++++++++++++---------------------------- docs/swagger.yaml | 33 ++++++++++++--------------------- 3 files changed, 42 insertions(+), 77 deletions(-) diff --git a/docs/docs.go b/docs/docs.go index 398eadd..04b29d2 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -64,28 +64,19 @@ const docTemplate = `{ "400": { "description": "Bad Request", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "401": { "description": "Unauthorized", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "500": { "description": "Internal Server Error", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } } } @@ -131,37 +122,25 @@ const docTemplate = `{ "400": { "description": "Bad Request", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "401": { "description": "Unauthorized", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "404": { "description": "Not Found", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "500": { "description": "Internal Server Error", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } } } @@ -169,6 +148,14 @@ const docTemplate = `{ } }, "definitions": { + "handlers.Error": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + }, "product.Product": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index 22b0495..5e24b38 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -57,28 +57,19 @@ "400": { "description": "Bad Request", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "401": { "description": "Unauthorized", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "500": { "description": "Internal Server Error", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } } } @@ -124,37 +115,25 @@ "400": { "description": "Bad Request", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "401": { "description": "Unauthorized", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "404": { "description": "Not Found", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } }, "500": { "description": "Internal Server Error", "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/handlers.Error" } } } @@ -162,6 +141,14 @@ } }, "definitions": { + "handlers.Error": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + }, "product.Product": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 9fb97b7..b1d607d 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1,5 +1,10 @@ basePath: /api/v1 definitions: + handlers.Error: + properties: + error: + type: string + type: object product.Product: properties: _id: @@ -264,27 +269,19 @@ paths: "400": description: Bad Request schema: - additionalProperties: - type: string - type: object + $ref: '#/definitions/handlers.Error' "401": description: Unauthorized schema: - additionalProperties: - type: string - type: object + $ref: '#/definitions/handlers.Error' "404": description: Not Found schema: - additionalProperties: - type: string - type: object + $ref: '#/definitions/handlers.Error' "500": description: Internal Server Error schema: - additionalProperties: - type: string - type: object + $ref: '#/definitions/handlers.Error' security: - Bearer: [] summary: Get product by ID @@ -319,21 +316,15 @@ paths: "400": description: Bad Request schema: - additionalProperties: - type: string - type: object + $ref: '#/definitions/handlers.Error' "401": description: Unauthorized schema: - additionalProperties: - type: string - type: object + $ref: '#/definitions/handlers.Error' "500": description: Internal Server Error schema: - additionalProperties: - type: string - type: object + $ref: '#/definitions/handlers.Error' security: - Bearer: [] summary: Search products From 12d802dd36bbcbb03b6abbdbcf1506b125dc9cb2 Mon Sep 17 00:00:00 2001 From: LightJack05 <66321084+LightJack05@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:35:02 +0100 Subject: [PATCH 3/4] Update swagger docs --- internal/handlers/product/get.go | 2 +- internal/handlers/product/getId.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/handlers/product/get.go b/internal/handlers/product/get.go index dd906a5..4874df0 100644 --- a/internal/handlers/product/get.go +++ b/internal/handlers/product/get.go @@ -22,7 +22,7 @@ type productGetResponse struct { // @Produce json // @Param q query string true "Search query (min 3 chars)" // @Param limit query int false "Limit results (default 10, max 100)" -// @Success 200 {object} map[string][]product.Product +// @Success 200 {object} productGetResponse // @Failure 400 {object} handlers.Error // @Failure 401 {object} handlers.Error // @Failure 500 {object} handlers.Error diff --git a/internal/handlers/product/getId.go b/internal/handlers/product/getId.go index c01e2d3..37343fb 100644 --- a/internal/handlers/product/getId.go +++ b/internal/handlers/product/getId.go @@ -20,7 +20,7 @@ type getProductByIdResponse struct { // @Accept json // @Produce json // @Param id path string true "Product ID" -// @Success 200 {object} map[string]product.Product +// @Success 200 {object} getProductByIdResponse // @Failure 400 {object} handlers.Error // @Failure 401 {object} handlers.Error // @Failure 404 {object} handlers.Error From 273a8cd20219e2e020a5162db2568e188b5fae8f Mon Sep 17 00:00:00 2001 From: LightJack05 <66321084+LightJack05@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:35:37 +0100 Subject: [PATCH 4/4] Update swagger gen --- docs/docs.go | 32 +++++++++++++++++++++----------- docs/swagger.json | 32 +++++++++++++++++++++----------- docs/swagger.yaml | 22 ++++++++++++++-------- 3 files changed, 56 insertions(+), 30 deletions(-) diff --git a/docs/docs.go b/docs/docs.go index 04b29d2..6f0b677 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -52,13 +52,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/definitions/product.Product" - } - } + "$ref": "#/definitions/product.productGetResponse" } }, "400": { @@ -113,10 +107,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/product.Product" - } + "$ref": "#/definitions/product.getProductByIdResponse" } }, "400": { @@ -509,6 +500,25 @@ const docTemplate = `{ "type": "string" } } + }, + "product.getProductByIdResponse": { + "type": "object", + "properties": { + "product": { + "$ref": "#/definitions/product.Product" + } + } + }, + "product.productGetResponse": { + "type": "object", + "properties": { + "products": { + "type": "array", + "items": { + "$ref": "#/definitions/product.Product" + } + } + } } }, "securityDefinitions": { diff --git a/docs/swagger.json b/docs/swagger.json index 5e24b38..a99fb2b 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -45,13 +45,7 @@ "200": { "description": "OK", "schema": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/definitions/product.Product" - } - } + "$ref": "#/definitions/product.productGetResponse" } }, "400": { @@ -106,10 +100,7 @@ "200": { "description": "OK", "schema": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/product.Product" - } + "$ref": "#/definitions/product.getProductByIdResponse" } }, "400": { @@ -502,6 +493,25 @@ "type": "string" } } + }, + "product.getProductByIdResponse": { + "type": "object", + "properties": { + "product": { + "$ref": "#/definitions/product.Product" + } + } + }, + "product.productGetResponse": { + "type": "object", + "properties": { + "products": { + "type": "array", + "items": { + "$ref": "#/definitions/product.Product" + } + } + } } }, "securityDefinitions": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index b1d607d..2380081 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -240,6 +240,18 @@ definitions: product_name: type: string type: object + product.getProductByIdResponse: + properties: + product: + $ref: '#/definitions/product.Product' + type: object + product.productGetResponse: + properties: + products: + items: + $ref: '#/definitions/product.Product' + type: array + type: object info: contact: {} description: API for accessing the SnackLog product database. @@ -263,9 +275,7 @@ paths: "200": description: OK schema: - additionalProperties: - $ref: '#/definitions/product.Product' - type: object + $ref: '#/definitions/product.getProductByIdResponse' "400": description: Bad Request schema: @@ -308,11 +318,7 @@ paths: "200": description: OK schema: - additionalProperties: - items: - $ref: '#/definitions/product.Product' - type: array - type: object + $ref: '#/definitions/product.productGetResponse' "400": description: Bad Request schema: