Documentación de la API

API RESTful para el sistema de Ecommerce

Introducción

Bienvenido a la documentación de la API de Ecommerce. Esta API proporciona acceso a los recursos necesarios para gestionar productos, carritos de compras, usuarios y autenticación.

URL Base: http://tu-dominio.com/api

Autenticación

La mayoría de los endpoints requieren autenticación mediante JWT (JSON Web Token). Incluye el token en el encabezado de autorización:

Authorization: Bearer <token>

Códigos de estado comunes

  • 200 OK - La solicitud se completó exitosamente
  • 201 Creado - Recurso creado exitosamente
  • 400 Error - Solicitud incorrecta (datos inválidos)
  • 401 No autorizado - Se requiere autenticación
  • 403 Prohibido - No tienes permiso para realizar esta acción
  • 404 No encontrado - El recurso solicitado no existe
  • 500 Error del servidor - Error interno del servidor
Autenticación
POST

/api/session/register

Registra un nuevo usuario en el sistema.

Parámetros del cuerpo (JSON)

Parámetro Tipo Requerido Descripción
first_name String Nombre del usuario
last_name String Apellido del usuario
email String Email del usuario (debe ser único)
age Number No Edad del usuario
password String Contraseña (mínimo 6 caracteres)
Solicitud
Respuesta
POST /api/session/register
// Headers
Content-Type: application/json

{
  "first_name": "Juan",
  "last_name": "Pérez",
  "email": "juan@example.com",
  "age": 30,
  "password": "miContraseña123"
}
// 201 Created
{
  "status": "success",
  "message": "Usuario registrado exitosamente",
  "data": {
    "user": {
      "first_name": "Juan",
      "last_name": "Pérez",
      "email": "juan@example.com",
      "age": 30,
      "role": "user"
    }
  }
}
POST

/api/session/login

Inicia sesión de usuario y devuelve un token JWT.

Parámetros del cuerpo (JSON)

Parámetro Tipo Requerido Descripción
email String Email del usuario
password String Contraseña del usuario
Solicitud
Respuesta
POST /api/session/login
// Headers
Content-Type: application/json

{
  "email": "juan@example.com",
  "password": "miContraseña123"
}
// 200 OK
{
  "status": "success",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "first_name": "Juan",
    "last_name": "Pérez",
    "email": "juan@example.com",
    "role": "user",
    "cart": "cart_1234567890"
  }
}

/api/session/login (POST)

Endpoint para iniciar sesión de usuario.

Parámetros:

  • email (String) requerido : El email del usuario.
  • password (String) requerido : La contraseña del usuario (min de caracteres 6).

/api/session/register (POST)

Endpoint para registrar un nuevo usuario.

Parámetros:

  • first_name(String) requerido : El nombre del usuario.
  • last_name (String) requerido : El apellido del usuario.
  • age (Number) : El apellido del usuario.
  • email (String) requerido : El email del usuario.
  • password (String) requerido : La contraseña del usuario (min de caracteres 6).

/api/session/renew (POST)

Endpoint para revalidar el token del usuario.

/api/session/change-password (POST)

Endpoint para solicitar el cambio de la contraseña.

Parámetros:

  • email (String) requerido : El email del usuario.

/api/session/reset-password (POST)

Endpoint para cambiar la contraseña.

Parámetros:

  • email (String) requerido : El email del usuario.
  • password (String) requerido : La contraseña del usuario (min de caracteres 6).

/api/session/delete-user (POST)

Endpoint para eliminar un usuario.

Parámetros:

  • email (String) requerido : El email del usuario.
  • password (String) requerido : La contraseña del usuario (min de caracteres 6).

/api/session/delete-users (POST)

Endpoint para eliminar los usuarios inactivos.

Parámetros:

  • email (String) requerido : El email del usuario.
Productos
GET

/api/products

Obtiene un listado paginado de productos.

Parámetros de consulta

Parámetro Tipo Requerido Descripción Valor por defecto
limit Number No Número de productos por página 10
page Number No Número de página 1
sort String No Ordenamiento: 'asc' o 'desc' Ninguno
query String No Filtro de búsqueda (por título o descripción) Ninguno
category String No Filtrar por categoría Ninguno
status Boolean No Filtrar por estado (true/false) Ninguno
Solicitud
Respuesta
GET /api/products?limit=5&page=1&sort=desc&category=electronics
// Headers
Authorization: Bearer <token>
// 200 OK
{
  "status": "success",
  "payload": [
    {
      "_id": "60d21b4667d0d8992e610c85",
      "title": "Laptop HP",
      "description": "Laptop HP 15-dw1000la",
      "code": "LAP123",
      "price": 1299.99,
      "status": true,
      "stock": 25,
      "category": "electronics",
      "thumbnails": ["image1.jpg", "image2.jpg"],
      "owner": "admin@example.com"
    },
    // ... más productos
  ],
  "totalPages": 3,
  "prevPage": null,
  "nextPage": 2,
  "page": 1,
  "hasPrevPage": false,
  "hasNextPage": true,
  "prevLink": null,
  "nextLink": "/api/products?page=2"
}
POST

/api/products

Autenticación requerida

Crea un nuevo producto. Requiere autenticación y rol de administrador o premium.

Parámetros del cuerpo (FormData)

Parámetro Tipo Requerido Descripción
title String Nombre del producto
description String Descripción detallada
code String Código único del producto
price Number Precio del producto
stock Number Cantidad en stock
category String Categoría del producto
thumbnails File[] No Imágenes del producto (máx. 3)
Solicitud
Respuesta
POST /api/products
// Headers
Authorization: Bearer <token>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="title"

Nuevo Producto
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="description"

Descripción del nuevo producto
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="code"

CODE123
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="price"

99.99
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="stock"

50
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="category"

electronics
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="thumbnails"; filename="product.jpg"
Content-Type: image/jpeg

(binary data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--
// 201 Created
{
  "status": "success",
  "message": "Producto creado exitosamente",
  "data": {
    "_id": "60d21b4667d0d8992e610c86",
    "title": "Nuevo Producto",
    "description": "Descripción del nuevo producto",
    "code": "CODE123",
    "price": 99.99,
    "status": true,
    "stock": 50,
    "category": "electronics",
    "thumbnails": ["product-123.jpg"],
    "owner": "usuario@example.com"
  }
}

/api/products (GET)

Endpoint para obtener productos paginados.

Parámetros:

  • limit (Number): limite de elementos a obtener.
  • page (Number): el numero de la pagina.
  • sort (String): tipo de ordenamiento ('asc', 'desc').
  • query (String): Query personalizada de busqueda.

/api/products/:pid (GET)

Endpoint para obtener un producto por id.

Parámetros:

  • pid (String) requerido : Id de mongo valido.

/api/products (POST)

Endpoint para crear un nuevo producto.

Parámetros:

  • title (String) requerido : Titulo del producto.
  • description (String) requerido : Descripcion del producto.
  • code (String) requerido : Codigo unico del del producto.
  • price (Number) requerido : Precio del producto.
  • stock (Number) requerido : Stock del producto.
  • category (String) requerido : Categoria del producto.
  • file (file): Imagen con extensiones validas ['png', 'jpg', 'jpeg'].

/api/products/:pid (PUT)

Endpoint para actualizar un producto.

Parámetros:

  • pid (String) requerido : Id del producto y debe ser un id valido de mongo.
  • title (String): Titulo del producto.
  • description (String): Descripcion del producto.
  • code (String): Codigo unico del del producto.
  • price (Number): Precio del producto.
  • stock (Number): Stock del producto.
  • category (String): Categoria del producto.
  • file (file): Imagen con extensiones validas ['png', 'jpg', 'jpeg'].

/api/products/:pid (DELETE)

Endpoint para eliminar un producto.

Parámetros:

  • pid (String) requerido : Id del producto y debe ser un id valido de mongo.
Carrito de Compras
POST

/api/carts

Autenticación requerida

Crea un nuevo carrito de compras.

Solicitud
Respuesta
POST /api/carts
// Headers
Authorization: Bearer <token>
// 201 Created
{
  "status": "success",
  "message": "Carrito creado exitosamente",
  "data": {
    "_id": "60d21b4667d0d8992e610c90",
    "products": [],
    "user": "60d21b4667d0d8992e610c85",
    "createdAt": "2023-06-01T12:00:00.000Z",
    "updatedAt": "2023-06-01T12:00:00.000Z"
  }
}
GET

/api/carts/:cid

Autenticación requerida

Obtiene los productos de un carrito específico.

Parámetros de ruta

Parámetro Tipo Requerido Descripción
cid String ID del carrito
Solicitud
Respuesta
GET /api/carts/60d21b4667d0d8992e610c90
// Headers
Authorization: Bearer <token>
// 200 OK
{
  "status": "success",
  "data": {
    "_id": "60d21b4667d0d8992e610c90",
    "products": [
      {
        "product": {
          "_id": "60d21b4667d0d8992e610c85",
          "title": "Laptop HP",
          "price": 1299.99,
          "thumbnails": ["image1.jpg"]
        },
        "quantity": 2
      }
    ],
    "user": "60d21b4667d0d8992e610c85",
    "total": 2599.98,
    "createdAt": "2023-06-01T12:00:00.000Z",
    "updatedAt": "2023-06-01T12:30:00.000Z"
  }
}
POST

/api/carts/:cid/product/:pid

Autenticación requerida

Agrega un producto al carrito o incrementa su cantidad si ya existe.

Parámetros de ruta

Parámetro Tipo Requerido Descripción
cid String ID del carrito
pid String ID del producto a agregar

Parámetros del cuerpo (JSON)

Parámetro Tipo Requerido Descripción Valor por defecto
quantity Number No Cantidad a agregar 1
Solicitud
Respuesta
POST /api/carts/60d21b4667d0d8992e610c90/product/60d21b4667d0d8992e610c85
// Headers
Authorization: Bearer <token>
Content-Type: application/json

{
  "quantity": 2
}
// 200 OK
{
  "status": "success",
  "message": "Producto agregado al carrito",
  "data": {
    "_id": "60d21b4667d0d8992e610c90",
    "products": [
      {
        "product": "60d21b4667d0d8992e610c85",
        "quantity": 2
      }
    ],
    "user": "60d21b4667d0d8992e610c85",
    "updatedAt": "2023-06-01T13:00:00.000Z"
  }
}

/api/carts/:cid (GET)

Endpoint para obtener un carrito.

Parámetros:

  • cid (String) requerido : Id del carrito y debe ser un id valido de mongo.

/api/carts/:cid/product/:pid (POST)

Endpoint para obtener agregar un producto al carrito.

Parámetros:

  • cid (String) requerido : Id del carrito y debe ser un id valido de mongo.
  • pid (String) requerido : Id del producto y debe ser un id valido de mongo.

/api/carts/:cid/product/:pid (DELETE)

Endpoint para eliminar productos de un carrito.

Parámetros:

  • cid (String) requerido : Id del carrito y debe ser un id valido de mongo.
  • pid (String) requerido : Id del producto y debe ser un id valido de mongo.

/api/carts/:cid/product/:pid (PUT)

Endpoint para obtener productos.

Parámetros:

  • cid (String) requerido : Id del carrito y debe ser un id valido de mongo.
  • pid (String) requerido : Id del producto y debe ser un id valido de mongo.
  • quantity (Number) requerido : Cantidad del producto.

/api/carts/:cid/purchase (POST)

Endpoint para obtener productos.

Parámetros:

  • cid (String) requerido : Id del carrito y debe ser un id valido de mongo.
Tickets

/api/session/tickets (GET)

Endpoint para obtener el ticket de compra.

Parámetros:

  • code (String) requerido : el code es obligatorio.
  • purchase_datetime (Date): Date de la compra.
  • amount (Number) requerido : El amount (total de la compra) es obligatorio.
  • purchase (String) requerido : El purchase (email) es obligatorio.
  • items (Object) requerido : La propiedad items es obligatoria.
Chat

/api/chat (GET)

Endpoint para Chat.

Parámetros:

  • user (String): El usuario o Id.

/api/chat (POST)

Endpoint enviar un mensaje para Chat.

Parámetros:

  • user (String): El user / usuario o Id.
  • message (String): El mensaje.