Repository navigation
Home
Documentación técnica de los servicios, endpoints, modelos y contratos de la API Backend del ecommerce LaSobremesa.
Esta Wiki tiene como objetivo centralizar la documentación de la API y facilitar el desarrollo, integración y mantenimiento de los distintos servicios del proyecto.
LaSobremesa es un ecommerce orientado a la comercialización de productos artesanales provenientes de proveedores locales.
El backend expone una API REST organizada en distintos dominios de negocio, incluyendo catálogo, usuarios y proveedores, carrito y pedidos, checkout, autenticación y cuenta, comunidad y fidelización, y logística.
Servicios relacionados con los productos disponibles en la tienda.
Servicios relacionados con los usuarios del sistema, proveedores locales y sus direcciones.
Servicios relacionados con el proceso de compra y gestión de pedidos.
Servicios relacionados con el proceso de finalización de compra.
- Checkout
- Datos de despacho
- Datos de facturación
- Métodos de pago
- Confirmación de compra
Servicios relacionados con autenticación, registro y gestión de cuentas.
- Autenticación
- Cuenta
- Registro
- Recuperación de contraseña
- Verificación de correo electrónico
Servicios relacionados con la interacción de los usuarios y su relación con el ecommerce.
Servicios relacionados con la gestión y seguimiento del despacho de los pedidos.
- Despacho
- Métodos de entrega
- Tiempo de entrega
- Seguimiento de despacho
- Zonas de despacho
La definición de los dominios y servicios del backend se realizó considerando el Sitemap general del proyecto y el nivel de detalle presente en los wireframes.
El Sitemap representa la estructura general de navegación, mientras que los wireframes detallan las funcionalidades asociadas a cada sección. Por este motivo, algunas funcionalidades del backend pueden no aparecer explícitamente en el Sitemap, pero sí estar representadas en los wireframes.
La siguiente tabla muestra la relación entre las secciones del Sitemap, las funcionalidades identificadas, los dominios del backend y los servicios correspondientes.
| Sección del Sitemap | Funcionalidad | Dominio | Servicio |
|---|---|---|---|
| Productos | Catálogo (Lista de productos) | Catálogo | Productos |
| Productos | Catálogo (Lista de productos) | Catálogo | Categorías |
| Productos | Catálogo (Lista de productos) | Catálogo | Stock |
| Productos | Detalle del producto | Catálogo | Productos |
| Productos | Reseñas del producto | Comunidad y fidelización | Reseñas |
| Historias | Productores | Usuarios y proveedores | Proveedores |
| Historias | Perfil de cada productor | Usuarios y proveedores | Proveedores |
| Suscripción | Planes | Comunidad y fidelización | Suscripciones |
| Cuenta | Mis datos | Autenticación y cuenta | Usuarios |
| Cuenta | Mis datos (Direcciones) | Usuarios y proveedores | Direcciones |
| Cuenta | Mis pedidos | Carrito y pedidos | Pedidos |
| Cuenta | Mis pedidos | Carrito y pedidos | Detalle de pedidos |
| Cuenta | Mis pedidos | Carrito y pedidos | Estados de pedidos |
| Cuenta | Mis pedidos | Carrito y pedidos | Historial de pedidos |
| Cuenta | Mi suscripción | Comunidad y fidelización | Suscripciones |
| Cuenta | Favoritos | Catálogo | Favoritos |
| Cuenta | Tarjetas | Usuarios y proveedores | Tarjetas |
| Cuenta | Autenticación | Autenticación y cuenta | Autenticación |
| Cuenta | Registro | Autenticación y cuenta | Registro |
| Cuenta | Recuperación de contraseña | Autenticación y cuenta | Recuperación de contraseña |
| Cuenta | Verificación de correo electrónico | Autenticación y cuenta | Verificación de correo electrónico |
| Carrito | Carrito | Carrito y pedidos | Carrito |
| Carrito | Carrito | Carrito y pedidos | Ítems del carrito |
| Carrito | Checkout | Checkout | Checkout |
| Carrito | Checkout | Checkout | Datos de despacho |
| Carrito | Checkout | Checkout | Métodos de entrega |
| Carrito | Checkout | Checkout | Tiempo de entrega |
| Carrito | Checkout | Checkout | Datos de facturación |
| Carrito | Checkout | Checkout | Métodos de pago |
| Carrito | Compra exitosa | Checkout | Confirmación de compra |
| Ayuda | Envíos | Logística | Despacho |
| Ayuda | Envíos | Logística | Seguimiento de despacho |
| Ayuda | Envíos | Logística | Zonas de despacho |
La API está organizada en dominios funcionales, los cuales agrupan los distintos servicios del ecommerce.
| Dominio | Servicios |
|---|---|
| Catálogo | Productos, Categorías, Favoritos, Stock |
| Usuarios y proveedores | Usuarios, Proveedores, Direcciones, Tarjetas |
| Carrito y pedidos | Carrito, Ítems del carrito, Pedidos, Detalle de pedidos, Estados de pedidos, Historial de pedidos |
| Checkout | Checkout, Datos de despacho, Datos de facturación, Métodos de pago, Confirmación de compra |
| Autenticación y cuenta | Autenticación, Cuenta, Registro, Recuperación de contraseña, Verificación de correo electrónico |
| Comunidad y fidelización | Suscripciones, Reseñas |
| Logística | Despacho, Métodos de entrega, Tiempo de entrega, Seguimiento de despacho, Zonas de despacho |
El estado de cada servicio refleja su avance de implementación para el Hito 2. Los servicios implementados utilizan comportamiento simulado y no necesariamente cuentan con persistencia ni lógica de negocio completa.
| Dominio | Servicio | Estado |
|---|---|---|
| Catálogo | Productos | 🟢 Implementado (simulado) |
| Catálogo | Categorías | 🟡 En desarrollo |
| Catálogo | Favoritos | 🟢 Implementado (simulado) |
| Catálogo | Stock | 🟡 En desarrollo |
| Usuarios y proveedores | Usuarios | 🟡 En desarrollo |
| Usuarios y proveedores | Proveedores | 🟢 Implementado (simulado) |
| Usuarios y proveedores | Direcciones | 🟡 En desarrollo |
| Usuarios y proveedores | Tarjetas | 🟢 Implementado (simulado) |
| Carrito y pedidos | Carrito | 🟡 En desarrollo |
| Carrito y pedidos | Ítems del carrito | 🟡 En desarrollo |
| Carrito y pedidos | Pedidos | 🟡 En desarrollo |
| Carrito y pedidos | Detalle de pedidos | 🟡 En desarrollo |
| Carrito y pedidos | Estados de pedidos | 🟡 En desarrollo |
| Carrito y pedidos | Historial de pedidos | 🟡 En desarrollo |
| Checkout | Checkout | 🟢 Implementado (simulado) |
| Checkout | Datos de despacho | 🟡 En desarrollo |
| Checkout | Datos de facturación | 🟢 Implementado (simulado) |
| Checkout | Métodos de pago | 🟡 En desarrollo |
| Checkout | Confirmación de compra | 🟢 Implementado (simulado) |
| Autenticación y cuenta | Autenticación | 🟢 Implementado (simulado) |
| Autenticación y cuenta | Cuenta | 🟡 En desarrollo |
| Autenticación y cuenta | Registro | 🟢 Implementado (simulado) |
| Autenticación y cuenta | Recuperación de contraseña | 🟡 En desarrollo |
| Autenticación y cuenta | Verificación de correo electrónico | 🟡 En desarrollo |
| Comunidad y fidelización | Suscripciones | 🟡 En desarrollo |
| Comunidad y fidelización | Reseñas | 🟢 Implementado (simulado) |
| Logística | Despacho | 🟡 En desarrollo |
| Logística | Métodos de entrega | 🟡 En desarrollo |
| Logística | Tiempo de entrega | 🟡 En desarrollo |
| Logística | Seguimiento de despacho | 🟡 En desarrollo |
| Logística | Zonas de despacho | 🟡 En desarrollo |
Los estados corresponden al avance actual del proyecto y pueden cambiar durante el desarrollo.
El proyecto utiliza una estrategia de ramas para organizar el desarrollo, integrar las funcionalidades y mantener estable la versión principal.
-
main: rama principal y estable del proyecto. -
develop: rama de integración donde se incorporan y validan las funcionalidades desarrolladas por el equipo. -
feature/*: ramas de trabajo para implementar funcionalidades específicas.
- Crear una rama
feature/*a partir dedevelop. - Desarrollar y probar los cambios en la rama correspondiente.
- Crear un Pull Request (PR) desde
feature/*haciadevelop. - Revisar y aprobar el PR antes de integrar los cambios en
develop. - Validar la integración de las funcionalidades en
develop. - Crear un Pull Request desde
develophaciamaincuando la versión esté lista. - Revisar y aprobar el PR para incorporar los cambios en
main.
Este flujo permite integrar y validar el trabajo del equipo antes de incorporarlo a la rama principal estable.
La rama main contiene el código estable del proyecto y no se utiliza para desarrollar directamente.
Cada servicio o funcionalidad se desarrolla en una rama independiente utilizando la siguiente nomenclatura:
feature/<nombre-del-servicio>
Ejemplos:
feature/productosfeature/categoriasfeature/direccionesfeature/usuariosfeature/proveedores
Una vez finalizado el desarrollo de una funcionalidad, se crea un Pull Request desde la rama feature/* correspondiente hacia develop.
Los cambios deben ser revisados antes de realizar el merge.
La API utiliza una arquitectura REST y sigue las siguientes convenciones:
| Método | Uso |
|---|---|
GET |
Consultar recursos |
POST |
Crear recursos |
PUT |
Actualizar completamente un recurso |
PATCH |
Actualizar parcialmente un recurso |
DELETE |
Eliminar recursos |
- Los identificadores de recursos se utilizan como parámetros de ruta.
- Los filtros de búsqueda se envían mediante query parameters.
- Los datos para crear o actualizar recursos se envían mediante
Request Body.
Las respuestas exitosas utilizan códigos HTTP según la operación realizada.
| Código | Uso |
|---|---|
200 OK |
Operación exitosa |
201 Created |
Recurso creado correctamente |
204 No Content |
Operación exitosa sin contenido |
400 Bad Request |
Datos o parámetros inválidos |
404 Not Found |
Recurso no encontrado |
409 Conflict |
Conflicto con el estado actual del recurso |
Cada página de servicio contiene:
- Descripción del servicio.
- Endpoints disponibles.
- Modelos utilizados.
- DTOs de entrada y salida.
- Parámetros de ruta.
- Query parameters.
- Request Bodies.
- Ejemplos de respuestas.
- Códigos HTTP.
- Respuestas de error.
Los contratos de los endpoints se documentan utilizando Swagger/OpenAPI.
La documentación incluye:
- Parámetros de entrada.
- DTOs.
- Tipos de respuesta.
- Códigos HTTP.
- Ejemplos de datos.
- Respuestas de error.
La documentación Swagger sirve como referencia técnica complementaria a esta Wiki.
Durante el Hito 1 se define la estructura inicial del backend y los principales contratos de la API.
Entre los aspectos considerados se encuentran:
- Definición de los principales dominios del sistema.
- Identificación de los servicios necesarios para el ecommerce.
- Definición de entidades y modelos.
- Definición de DTOs.
- Diseño de endpoints REST.
- Definición de parámetros de entrada.
- Definición de respuestas de la API.
- Documentación de los endpoints mediante Swagger.
- Documentación técnica de los servicios mediante esta Wiki.
- Definición de responsabilidades dentro del equipo.
El Hito 2 tiene como objetivo avanzar desde la definición de los contratos de la API hacia una primera implementación funcional del backend, manteniendo la coherencia entre los endpoints, los DTOs, las validaciones y la documentación.
- Servicios REST: implementación inicial de endpoints para los servicios asignados, utilizando respuestas simuladas cuando la lógica de negocio o la persistencia aún no están disponibles.
- DTOs: definición de objetos para estructurar los datos de entrada y salida de los endpoints.
- Validaciones: incorporación de validaciones para los datos recibidos mediante DTOs y mecanismos de validación de NestJS.
- Documentación Swagger: documentación de los endpoints, parámetros, DTOs, validaciones y respuestas HTTP.
-
Trazabilidad de solicitudes: incorporación de un identificador único por solicitud, disponible en el encabezado de respuesta
x-request-id. - Registro de solicitudes: registro de información relevante para el seguimiento de las solicitudes, incluyendo identificador, fecha y hora, método HTTP, ruta, duración y código de respuesta.
- Manejo de errores: incorporación de excepciones y filtros para estandarizar las respuestas de error HTTP.
- Configuración del entorno: documentación de las variables de entorno necesarias para ejecutar la aplicación.
- Contenedorización: incorporación de Docker para facilitar la ejecución del backend y su entorno local.
La implementación de este hito constituye una primera versión funcional de la API. Algunos endpoints utilizan datos y respuestas simuladas, por lo que no representan necesariamente operaciones persistentes ni procesos de negocio completos.
La persistencia definitiva, el modelo físico de la base de datos y la integración completa de los procesos de negocio se desarrollarán según el alcance de las siguientes etapas del proyecto.
A continuación se indican los endpoints actualmente definidos para cada servicio.
-
GET /productos- Obtener lista de productos con filtros opcionales -
GET /productos/top-ventas- Obtener productos más vendidos -
GET /productos/{id}- Obtener producto por ID -
POST /productos- Crear producto -
PATCH /productos/{id}- Actualizar producto -
DELETE /productos/{id}- Eliminar producto
-
GET /categorias- Obtener lista de categorías con filtro opcional por nombre -
GET /categorias/top- Obtener categorías más utilizadas -
GET /categorias/{id}- Obtener categoría por ID -
POST /categorias- Crear categoría -
PATCH /categorias/{id}- Actualizar categoría -
DELETE /categorias/{id}- Eliminar categoría
-
GET /stock/{productoId}- Obtener stock de un producto -
POST /stock- Crear registro de stock -
PATCH /stock/{productoId}- Actualizar stock de un producto -
DELETE /stock/{productoId}- Eliminar registro de stock
-
GET /usuarios- Obtener lista de usuarios -
GET /usuarios/{id}- Obtener usuario por ID -
POST /usuarios- Crear usuario -
PATCH /usuarios/{id}- Actualizar usuario -
DELETE /usuarios/{id}- Eliminar usuario
-
GET /proveedores- Obtener lista de proveedores -
GET /proveedores/{id}- Obtener proveedor por ID -
POST /proveedores- Crear proveedor -
PATCH /proveedores/{id}- Actualizar proveedor -
DELETE /proveedores/{id}- Eliminar proveedor
-
GET /direcciones- Obtener lista de direcciones -
GET /direcciones/{id}- Obtener dirección por ID -
POST /direcciones- Crear dirección -
PATCH /direcciones/{id}- Actualizar dirección -
DELETE /direcciones/{id}- Eliminar dirección
-
GET /carrito- Obtener información del carrito -
POST /carrito/items- Agregar un producto al carrito -
PUT /carrito/items/{itemId}- Actualizar la cantidad de un producto -
DELETE /carrito/items/{itemId}- Eliminar un producto del carrito -
DELETE /carrito- Vaciar el carrito completo
-
GET /pedidos- Obtener lista de pedidos -
GET /pedidos/{id}- Obtener pedido por ID -
POST /pedidos- Crear pedido -
PATCH /pedidos/{id}/estado- Actualizar estado del pedido
-
GET /resenas- Obtener lista de reseñas con filtros opcionales. -
GET /resenas/{id}- Obtener reseña por ID. -
POST /resenas- Crear reseña. -
PATCH /resenas/{id}- Actualizar parcialmente una reseña. -
DELETE /resenas/{id}- Eliminar reseña.
-
GET /suscripciones- Obtener suscripciones -
POST /suscripciones- Crear suscripción -
PATCH /suscripciones/{id}- Modificar suscripción -
PUT /suscripciones/{id}- Modificar datos de suscripción -
DELETE /suscripciones/{id}- Deshabilitar suscripción
-
POST /checkout- Iniciar el proceso de compra (simulado).
-
POST /autenticacion/registro- Registrar un usuario (simulado). -
POST /autenticacion/login- Iniciar sesión (simulado).
-
GET (/shipping)- Obtener despachos -
POST (/shipping)- crear nuevo despacho -
PUT(/shipping/{id})- Modificar totalmente despacho -
PATCH (/shipping/{id})- Modificar parcialmente despacho -
DELETE (/shipping/{id})- Eliminar despacho
-
POST /datos-facturacion- Ingresar datos de facturación (simulado).
-
POST /confirmacion-compra- Generar una confirmación de compra simulada.
-
POST /tarjetas- Simular el procesamiento de una tarjeta.
-
GET /favoritos- Obtener la lista de productos favoritos. -
POST /favoritos/{productoId}- Agregar un producto a favoritos. -
DELETE /favoritos/{productoId}- Eliminar un producto de favoritos.