Skip to content

OM-280: Agregand al swagger la parte de common, session y commerce - #50

Merged
Andoumeda merged 5 commits into
devfrom
OM-280-Configurar-Swagger
Mar 19, 2026
Merged

Andoumeda merged 5 commits into
devfrom
OM-280-Configurar-Swagger

Conversation

@CrisNAC

@CrisNAC CrisNAC commented Mar 19, 2026 •

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • Documentación

    • Documentación interactiva de la API disponible en /api/docs con autorización persistente y título personalizado.
    • Nuevos esquemas detallados para direcciones, productos, reseñas, etiquetas, tiendas y sesiones.
    • Anotaciones Swagger/OpenAPI añadidas a múltiples endpoints de comercio (productos, tiendas, reseñas, etiquetas).
  • Refactorización

    • Reorganización de la configuración de la documentación para mejorar mantenibilidad y carga.

@coderabbitai

coderabbitai Bot commented Mar 19, 2026 •

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c0bd52f5-220c-41f2-87fd-2c8d0df97c5c

📥 Commits

Reviewing files that changed from the base of the PR and between 5b1849b and c6b2d63.

📒 Files selected for processing (1)
  • src/modules/commerce/product-reviews/product-review.routes.js
✅ Files skipped from review due to trivial changes (1)
  • src/modules/commerce/product-reviews/product-review.routes.js

📝 Walkthrough

Walkthrough

Se movió y reescribió la configuración de Swagger de src/docs/swagger.config.js a src/config/swagger.config.js, se añadieron múltiples esquemas OpenAPI en src/docs/schemas/..., se actualizó la importación en src/app.js y se añadieron anotaciones @swagger en varias rutas para exponer la documentación en /api/docs.

Changes

Cohort / File(s) Summary
App & Swagger config
src/app.js, src/config/swagger.config.js, src/docs/swagger.config.js
src/docs/swagger.config.js eliminado; nueva src/config/swagger.config.js exporta swaggerSpec y setupSwagger(app) (monta UI en /api/docs usando swagger-jsdoc + swagger-ui-express). src/app.js actualiza la ruta de importación a ./config/swagger.config.js. Revisar que las exportaciones coincidan y que la nueva ruta exista en despliegue.
Schemas — commerce & common
src/docs/schemas/common.schema.js, src/docs/schemas/commerce/address.schema.js, src/docs/schemas/commerce/store.schema.js, src/docs/schemas/commerce/product.schema.js, src/docs/schemas/commerce/product-review.schema.js, src/docs/schemas/commerce/product-tag.schema.js, src/docs/schemas/session/session.schema.js
Nuevos archivos que definen JSON/OpenAPI schemas para requests/responses (errores comunes, direcciones, tiendas, productos, reseñas, etiquetas, sesión). Son declaraciones estáticas: revisar consistencia de nombres y formatos (date-time, enums, nullable).
Schemas index
src/docs/schemas/index.js
Nuevo re-export centralizado de los esquemas para facilitar su inclusión en la configuración de Swagger. Verificar rutas relativas/nombrado.
Rutas — JSDoc / Swagger
src/modules/commerce/commerces/store.routes.js, src/modules/commerce/product-reviews/product-review.routes.js, src/modules/commerce/product-tags/product-tag.routes.js, src/modules/commerce/products/product.routes.js, src/modules/commerce/addresses/routes/addresses.routes.js
Se añadieron bloques @swagger para múltiples endpoints (params, cuerpos, respuestas). No cambió la lógica de ruteo; revisar que los $ref a schemas apunten correctamente al components.schemas generados.
Formato / EOF y simplificación de imports
src/modules/...
Pequeños ajustes de formato, eliminación/añadido de newline final, y simplificación de import statements sin impacto funcional.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant App as Express App
    participant Config as Swagger Config
    participant JSDoc as swagger-jsdoc
    participant UI as swagger-ui-express
    participant Schemas as Docs Schemas

    Client->>App: inicia servidor (importa setupSwagger)
    App->>Config: llama setupSwagger(app)
    Config->>Schemas: importa/agrupa esquemas y patrones de rutas
    Config->>JSDoc: swaggerJsdoc(options) -> genera swaggerSpec
    Config->>UI: monta swaggerUi.serve y swaggerUi.setup(swaggerSpec) en /api/docs
    Client->>App: GET /api/docs
    App->>UI: sirve UI con swaggerSpec
    UI-->>Client: responde UI + especificación OpenAPI
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • Andoumeda
  • leoAchu16

Poem

🐇
Salté entre esquemas y rutas con brío,
Traje Swagger a casa y lo puse en el río.
/api/docs brilla, listo para ver,
Con esquemas y tags que invitan a creer.
¡Zanahoria de código, a celebrar y comer! 🥕

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed El título describe con precisión el cambio principal: agregar documentación Swagger para las secciones común, sesión y comercio. Refleja fielmente el contenido del changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch OM-280-Configurar-Swagger
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (8)
src/modules/commerce/products/product.routes.js (1)

14-255: Faltan respuestas 500 en varios contratos Swagger de productos.

Los controladores tienen fallback a 500 (create/update/search/getById/compare), pero en estas specs no siempre está documentado. Conviene agregarlo de forma consistente para reflejar el comportamiento real de API.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/modules/commerce/products/product.routes.js` around lines 14 - 255,
Swagger specs for several product routes are missing a 500 response; update the
JSDoc swagger blocks for the routes handled by createProduct, updateProduct,
getProductsSearch, getProductById and compareProducts (and optionally
deleteProduct) to include a consistent 500 response entry pointing to the
ErrorResponse schema so the docs reflect the controllers' fallback behavior;
edit the blocks above router.post("/", ...), router.put("/:id", ...),
router.get("/", ...), router.get("/:id", ...), and router.get("/compare/search",
...) to add the 500 responses with the same structure as other error responses.
src/docs/schemas/commerce/address.schema.js (1)

17-26: Inconsistencia en restricciones del campo address.

El campo address en CreateAddressRequest no tiene maxLength, pero en UpdateAddressRequest tampoco lo tiene, mientras que city y region sí lo tienen (100 caracteres). Para mantener consistencia y documentar correctamente los límites de la base de datos, considerar agregar maxLength al campo address.

♻️ Corrección sugerida
     CreateAddressRequest: {
         type: "object",
         required: ["address", "city", "region"],
         properties: {
-            address: { type: "string", example: "Av. España 1234" },
+            address: { type: "string", maxLength: 255, example: "Av. España 1234" },
             city: { type: "string", maxLength: 100, example: "Asunción" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/docs/schemas/commerce/address.schema.js` around lines 17 - 26, Add a
maxLength constraint to the address property in the CreateAddressRequest schema
to match the documented limits used for city/region and keep consistency with
UpdateAddressRequest; update the CreateAddressRequest -> properties -> address
definition to include an appropriate maxLength (e.g., 100) so it aligns with the
other string fields and DB limits referenced by UpdateAddressRequest.
src/docs/schemas/commerce/store.schema.js (1)

12-15: Considerar agregar format: "uri" a los campos de URL.

Los campos logo, website_url, instagram_url, y tiktok_url podrían beneficiarse de format: "uri" para documentar mejor el formato esperado y habilitar validación en clientes que soporten OpenAPI.

♻️ Corrección sugerida
-            logo: { type: "string", nullable: true, example: "https://example.com/logo.png" },
-            website_url: { type: "string", nullable: true, example: "https://micomercio.com" },
-            instagram_url: { type: "string", nullable: true, example: "https://instagram.com/micomercio" },
-            tiktok_url: { type: "string", nullable: true, example: "https://tiktok.com/@micomercio" },
+            logo: { type: "string", format: "uri", nullable: true, example: "https://example.com/logo.png" },
+            website_url: { type: "string", format: "uri", nullable: true, example: "https://micomercio.com" },
+            instagram_url: { type: "string", format: "uri", nullable: true, example: "https://instagram.com/micomercio" },
+            tiktok_url: { type: "string", format: "uri", nullable: true, example: "https://tiktok.com/@micomercio" },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/docs/schemas/commerce/store.schema.js` around lines 12 - 15, Agregar
`format: "uri"` a las propiedades de URL en el esquema para documentar y validar
su formato; en `store.schema.js` actualiza las definiciones de las propiedades
logo, website_url, instagram_url y tiktok_url para incluir `format: "uri"` junto
a `type: "string"` y `nullable: true` (es decir conservar los campos existentes
y añadir la clave `format` a cada una de esas cuatro propiedades).
src/docs/schemas/session/session.schema.js (3)

21-21: Inconsistencia en la definición del campo role.

En LoginResponse (línea 21), role está definido con enum: ["ADMIN", "CUSTOMER", "SELLER", "DELIVERY"], pero en UserSessionResponse (línea 36) solo tiene un example. Esto puede confundir a los consumidores de la API sobre los valores válidos.

♻️ Corrección sugerida para mantener consistencia
-                    role: { type: "string", example: "SELLER" },
+                    role: { type: "string", enum: ["ADMIN", "CUSTOMER", "SELLER", "DELIVERY"], example: "SELLER" },

Also applies to: 36-36

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/docs/schemas/session/session.schema.js` at line 21, The two response
schemas are inconsistent: LoginResponse defines role with enum
["ADMIN","CUSTOMER","SELLER","DELIVERY"] while UserSessionResponse only provides
an example; make them consistent by adding the same enum definition to the role
field in UserSessionResponse (or alternately remove the enum from LoginResponse
if you prefer the example-only approach) so both schemas (LoginResponse and
UserSessionResponse) declare the same allowed role values.

42-42: Falta punto y coma al final del objeto.

Para mantener consistencia con los otros archivos de esquemas que sí incluyen el punto y coma final.

🔧 Corrección sugerida
     }
-}
+};
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/docs/schemas/session/session.schema.js` at line 42, El objeto de esquema
definido en este archivo carece del punto y coma final; agrega un punto y coma
al cierre del objeto exportado (por ejemplo tras la llave final de session
schema/export, p. ej. después de module.exports = { ... }; o del objeto nombrado
sessionSchema) para mantener la consistencia con los demás esquemas.

1-1: Línea vacía innecesaria al inicio del archivo.

🔧 Corrección sugerida
-
 export const sessionSchemas = {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/docs/schemas/session/session.schema.js` at line 1, Elimina la línea vacía
al inicio del archivo src/docs/schemas/session/session.schema.js para que el
primer carácter del archivo sea el comienzo del contenido (por ejemplo la
declaración de imports, const SessionSchema, o module.exports); abre el archivo,
borra la línea en blanco inicial y guarda asegurándote de no introducir espacios
en blanco antes del primer token del archivo.
src/docs/schemas/index.js (1)

11-13: Código comentado sin contexto.

Estas líneas comentadas podrían generar confusión. Si son esquemas pendientes de implementar, sería mejor agregar un comentario TODO o eliminarlas y trackear el trabajo pendiente en un issue.

🔧 Opción 1: Agregar contexto
-/* export * from "./order.schema.js";
-export * from "./review.schema.js";
-export * from "./user.schema.js"; */
+// TODO: Habilitar cuando se implementen los esquemas
+// export * from "./order.schema.js";
+// export * from "./review.schema.js";
+// export * from "./user.schema.js";
🔧 Opción 2: Eliminar código muerto
 export * from "./session/session.schema.js";
-
-/* export * from "./order.schema.js";
-export * from "./review.schema.js";
-export * from "./user.schema.js"; */
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/docs/schemas/index.js` around lines 11 - 13, Las líneas que exportan
order.schema.js, review.schema.js y user.schema.js están comentadas sin
contexto; añade contexto o elimínalas: si esos esquemas están pendientes,
reemplaza el bloque comentado por un TODO que explique por qué están
deshabilitados e incluye referencia a un issue/ID (p. ej. TODO: implementar
order.schema - issue `#123`) para review.schema.js, user.schema.js y
order.schema.js; si son código muerto, elimina las tres líneas comentadas y
crea/adjunta un issue que documente el trabajo pendiente.
src/config/swagger.config.js (1)

23-36: Considerar parametrizar las URLs de servidores.

Las URLs de los servidores están hardcodeadas. Para mayor flexibilidad en diferentes entornos, podrían obtenerse desde variables de entorno.

♻️ Ejemplo de mejora
+const serverUrls = [
+    {
+        url: process.env.API_URL || "http://localhost:3000",
+        description: "Servidor local"
+    },
+    ...(process.env.TEST_API_URL ? [{
+        url: process.env.TEST_API_URL,
+        description: "Servidor de testeo"
+    }] : []),
+    ...(process.env.PROD_API_URL ? [{
+        url: process.env.PROD_API_URL,
+        description: "Servidor de producción"
+    }] : [])
+];

Nota: Esto es opcional y puede dejarse para una iteración futura si las URLs actuales funcionan bien para el equipo.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/config/swagger.config.js` around lines 23 - 36, Los URLs de servidores
están hardcodeados en la propiedad servers; cambia la definición para leerlos
desde variables de entorno (por ejemplo una variable SWAGGER_SERVER_URLS con
valores separados por comas o variables individuales como
SWAGGER_SERVER_LOCAL/TEST/PROD), parsear esos valores y construir el arreglo
servers dinámicamente con el mismo formato { url, description }, manteniendo los
valores actuales como fallback si la variable de entorno no está presente;
modifica la configuración exportada (la entidad que contiene servers en
swagger.config.js) para usar esa lógica al inicializar la configuración.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/docs/schemas/commerce/product.schema.js`:
- Line 38: En ProductSearchItemResponse cambia la propiedad definida como
id_product a id para que coincida con ProductResponse y con la normalización que
realiza product.service.js (en la transformación donde hace id:
product.id_product); actualiza el esquema en product.schema.js (referencia a
ProductSearchItemResponse) para usar id: { type: "integer", example: 1 } y
mantener la consistencia con la respuesta real.

In `@src/docs/schemas/common.schema.js`:
- Around line 2-22: El esquema ErrorResponse no refleja la estructura real
devuelta por el middleware authenticate (que usa errors.auth.message en
src/config/jwt.config.js), así que actualiza ErrorResponse en
src/docs/schemas/common.schema.js para incluir una propiedad errors con la forma
esperada (por ejemplo errors.auth.message como string) o un objeto genérico de
errores; modifica la definición de ErrorResponse (símbolo ErrorResponse) para
documentar errors: { auth: { message: { type: "string", example: "..." } } } o
un esquema equivalente que cubra responses 401 devolviendo errors.auth.message.

In `@src/modules/commerce/commerces/store.routes.js`:
- Around line 229-260: The OpenAPI block documents query params (name, sortBy,
sortOrder) that filterStoreProducts doesn't use; update filterStoreProducts in
store.controller.js to read req.query.name, req.query.sortBy and
req.query.sortOrder, apply name as a case-insensitive partial match (e.g., ILIKE
'%name%') to the products query, validate sortBy against allowed fields
(created_at, price, name) and sortOrder against (asc, desc), and apply them to
the DB query/order clause (e.g., .orderBy(sortBy, sortOrder) or equivalent),
defaulting safely when absent; alternatively remove those three params from the
Swagger block if you prefer keeping controller behavior unchanged.

In `@src/modules/commerce/product-reviews/product-review.routes.js`:
- Around line 8-9: The OpenAPI path is wrong: your routes are mounted with
app.use("/products/reviews", productReviewRoutes) and implemented as
router.get("/:id", ...) (productReviewRoutes + router.get), so the actual
endpoint is /products/reviews/{id}; update the Swagger/OpenAPI path from
/products/{id}/reviews to /products/reviews/{id} (or alternatively change how
you mount the router) so the documented path matches the real route.

---

Nitpick comments:
In `@src/config/swagger.config.js`:
- Around line 23-36: Los URLs de servidores están hardcodeados en la propiedad
servers; cambia la definición para leerlos desde variables de entorno (por
ejemplo una variable SWAGGER_SERVER_URLS con valores separados por comas o
variables individuales como SWAGGER_SERVER_LOCAL/TEST/PROD), parsear esos
valores y construir el arreglo servers dinámicamente con el mismo formato { url,
description }, manteniendo los valores actuales como fallback si la variable de
entorno no está presente; modifica la configuración exportada (la entidad que
contiene servers en swagger.config.js) para usar esa lógica al inicializar la
configuración.

In `@src/docs/schemas/commerce/address.schema.js`:
- Around line 17-26: Add a maxLength constraint to the address property in the
CreateAddressRequest schema to match the documented limits used for city/region
and keep consistency with UpdateAddressRequest; update the CreateAddressRequest
-> properties -> address definition to include an appropriate maxLength (e.g.,
100) so it aligns with the other string fields and DB limits referenced by
UpdateAddressRequest.

In `@src/docs/schemas/commerce/store.schema.js`:
- Around line 12-15: Agregar `format: "uri"` a las propiedades de URL en el
esquema para documentar y validar su formato; en `store.schema.js` actualiza las
definiciones de las propiedades logo, website_url, instagram_url y tiktok_url
para incluir `format: "uri"` junto a `type: "string"` y `nullable: true` (es
decir conservar los campos existentes y añadir la clave `format` a cada una de
esas cuatro propiedades).

In `@src/docs/schemas/index.js`:
- Around line 11-13: Las líneas que exportan order.schema.js, review.schema.js y
user.schema.js están comentadas sin contexto; añade contexto o elimínalas: si
esos esquemas están pendientes, reemplaza el bloque comentado por un TODO que
explique por qué están deshabilitados e incluye referencia a un issue/ID (p. ej.
TODO: implementar order.schema - issue `#123`) para review.schema.js,
user.schema.js y order.schema.js; si son código muerto, elimina las tres líneas
comentadas y crea/adjunta un issue que documente el trabajo pendiente.

In `@src/docs/schemas/session/session.schema.js`:
- Line 21: The two response schemas are inconsistent: LoginResponse defines role
with enum ["ADMIN","CUSTOMER","SELLER","DELIVERY"] while UserSessionResponse
only provides an example; make them consistent by adding the same enum
definition to the role field in UserSessionResponse (or alternately remove the
enum from LoginResponse if you prefer the example-only approach) so both schemas
(LoginResponse and UserSessionResponse) declare the same allowed role values.
- Line 42: El objeto de esquema definido en este archivo carece del punto y coma
final; agrega un punto y coma al cierre del objeto exportado (por ejemplo tras
la llave final de session schema/export, p. ej. después de module.exports = {
... }; o del objeto nombrado sessionSchema) para mantener la consistencia con
los demás esquemas.
- Line 1: Elimina la línea vacía al inicio del archivo
src/docs/schemas/session/session.schema.js para que el primer carácter del
archivo sea el comienzo del contenido (por ejemplo la declaración de imports,
const SessionSchema, o module.exports); abre el archivo, borra la línea en
blanco inicial y guarda asegurándote de no introducir espacios en blanco antes
del primer token del archivo.

In `@src/modules/commerce/products/product.routes.js`:
- Around line 14-255: Swagger specs for several product routes are missing a 500
response; update the JSDoc swagger blocks for the routes handled by
createProduct, updateProduct, getProductsSearch, getProductById and
compareProducts (and optionally deleteProduct) to include a consistent 500
response entry pointing to the ErrorResponse schema so the docs reflect the
controllers' fallback behavior; edit the blocks above router.post("/", ...),
router.put("/:id", ...), router.get("/", ...), router.get("/:id", ...), and
router.get("/compare/search", ...) to add the 500 responses with the same
structure as other error responses.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 36463e3b-672c-475e-b6ad-49fcc2a5957a

📥 Commits

Reviewing files that changed from the base of the PR and between 974293b and e8472a0.

📒 Files selected for processing (18)
  • src/app.js
  • src/config/swagger.config.js
  • src/docs/schemas/commerce/address.schema.js
  • src/docs/schemas/commerce/product-review.schema.js
  • src/docs/schemas/commerce/product-tag.schema.js
  • src/docs/schemas/commerce/product.schema.js
  • src/docs/schemas/commerce/store.schema.js
  • src/docs/schemas/common.schema.js
  • src/docs/schemas/index.js
  • src/docs/schemas/session.schema.js
  • src/docs/schemas/session/session.schema.js
  • src/docs/schemas/store.schema.js
  • src/docs/swagger.config.js
  • src/modules/commerce/addresses/routes/addresses.routes.js
  • src/modules/commerce/commerces/store.routes.js
  • src/modules/commerce/product-reviews/product-review.routes.js
  • src/modules/commerce/product-tags/product-tag.routes.js
  • src/modules/commerce/products/product.routes.js
💤 Files with no reviewable changes (1)
  • src/docs/swagger.config.js

Comment thread src/docs/schemas/commerce/product.schema.js
Comment thread src/docs/schemas/common.schema.js
Comment on lines +229 to +260
* - in: query
* name: name
* schema:
* type: string
* description: Filtrar por nombre del producto
* - in: query
* name: category
* schema:
* type: integer
* description: Filtrar por ID de categoría
* - in: query
* name: price_min
* schema:
* type: number
* description: Precio mínimo
* - in: query
* name: price_max
* schema:
* type: number
* description: Precio máximo
* - in: query
* name: sortBy
* schema:
* type: string
* enum: [created_at, price, name]
* description: Campo por el que ordenar
* - in: query
* name: sortOrder
* schema:
* type: string
* enum: [asc, desc]
* description: Dirección del ordenamiento

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Parámetros documentados que hoy no se aplican en el controlador.

En este endpoint se documentan name, sortBy y sortOrder, pero filterStoreProducts (en src/modules/commerce/commerces/store.controller.js, Lines 100-115) solo usa category, price_min y price_max. La spec queda engañosa para clientes.

💡 Ajuste sugerido (alinear docs con comportamiento actual)
- *       - in: query
- *         name: name
- *         schema:
- *           type: string
- *         description: Filtrar por nombre del producto
...
- *       - in: query
- *         name: sortBy
- *         schema:
- *           type: string
- *           enum: [created_at, price, name]
- *         description: Campo por el que ordenar
- *       - in: query
- *         name: sortOrder
- *         schema:
- *           type: string
- *           enum: [asc, desc]
- *         description: Dirección del ordenamiento
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
* - in: query
* name: name
* schema:
* type: string
* description: Filtrar por nombre del producto
* - in: query
* name: category
* schema:
* type: integer
* description: Filtrar por ID de categoría
* - in: query
* name: price_min
* schema:
* type: number
* description: Precio mínimo
* - in: query
* name: price_max
* schema:
* type: number
* description: Precio máximo
* - in: query
* name: sortBy
* schema:
* type: string
* enum: [created_at, price, name]
* description: Campo por el que ordenar
* - in: query
* name: sortOrder
* schema:
* type: string
* enum: [asc, desc]
* description: Dirección del ordenamiento
* - in: query
* name: category
* schema:
* type: integer
* description: Filtrar por ID de categoría
* - in: query
* name: price_min
* schema:
* type: number
* description: Precio mínimo
* - in: query
* name: price_max
* schema:
* type: number
* description: Precio máximo
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/modules/commerce/commerces/store.routes.js` around lines 229 - 260, The
OpenAPI block documents query params (name, sortBy, sortOrder) that
filterStoreProducts doesn't use; update filterStoreProducts in
store.controller.js to read req.query.name, req.query.sortBy and
req.query.sortOrder, apply name as a case-insensitive partial match (e.g., ILIKE
'%name%') to the products query, validate sortBy against allowed fields
(created_at, price, name) and sortOrder against (asc, desc), and apply them to
the DB query/order clause (e.g., .orderBy(sortBy, sortOrder) or equivalent),
defaulting safely when absent; alternatively remove those three params from the
Swagger block if you prefer keeping controller behavior unchanged.

Comment thread src/modules/commerce/product-reviews/product-review.routes.js Outdated
Comment thread src/modules/commerce/product-reviews/product-review.routes.js
@CrisNAC
CrisNAC requested a review from Andoumeda March 19, 2026 21:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants