Saltar a contenido

Productos

Este módulo maneja la gestión de productos en el sistema AgroMarket.

Endpoints

POST /api/v1/products/create

Crea un nuevo producto en el sistema.

URL: /api/v1/products/create

Método: POST

Headers:

Authorization: Bearer <token>
Content-Type: application/json

Body:

{
  "name": "Manzanas Rojas",
  "description": "Manzanas rojas frescas del valle",
  "price": 2.50,
  "quantity": 100,
  "image": "https://ejemplo.com/manzanas.jpg",
  "stock": 50,
  "measureUnit": "507f1f77bcf86cd799439012",
  "measurement": "507f1f77bcf86cd799439013",
  "category": "507f1f77bcf86cd799439014"
}

Respuesta exitosa (200):

{
  "product": {
    "_id": "507f1f77bcf86cd799439011",
    "name": "Manzanas Rojas",
    "description": "Manzanas rojas frescas del valle",
    "price": 2.50,
    "quantity": 100,
    "image": "https://ejemplo.com/manzanas.jpg",
    "stock": 50,
    "measureUnit": "507f1f77bcf86cd799439012",
    "measurement": "507f1f77bcf86cd799439013",
    "category": "507f1f77bcf86cd799439014",
    "user": "507f1f77bcf86cd799439015"
  }
}

GET /api/v1/products/all

Obtiene todos los productos disponibles en el sistema.

URL: /api/v1/products/all

Método: GET

Respuesta exitosa (200):

{
  "products": [
    {
      "_id": "507f1f77bcf86cd799439011",
      "name": "Manzanas Rojas",
      "description": "Manzanas rojas frescas del valle",
      "price": 2.50,
      "quantity": 100,
      "image": "https://ejemplo.com/manzanas.jpg",
      "stock": 50,
      "measureUnit": "507f1f77bcf86cd799439012",
      "measurement": "507f1f77bcf86cd799439013",
      "category": "507f1f77bcf86cd799439014",
      "user": "507f1f77bcf86cd799439015"
    }
  ]
}

GET /api/v1/products/nearby

Obtiene productos de usuarios cercanos a la ubicación del usuario autenticado.

URL: /api/v1/products/nearby

Método: GET

Headers:

Authorization: Bearer <token>

Parámetros de consulta: - maxDistance (opcional): Distancia máxima en metros (por defecto: 15000)

Ejemplo:

GET /api/v1/products/nearby?maxDistance=10000

Respuesta exitosa (200):

{
  "products": [
    {
      "_id": "507f1f77bcf86cd799439011",
      "name": "Manzanas Rojas",
      "description": "Manzanas rojas frescas del valle",
      "price": 2.50,
      "quantity": 100,
      "image": "https://ejemplo.com/manzanas.jpg",
      "stock": 50,
      "measureUnit": "507f1f77bcf86cd799439012",
      "measurement": "507f1f77bcf86cd799439013",
      "category": "507f1f77bcf86cd799439014",
      "user": "507f1f77bcf86cd799439015"
    }
  ]
}

Respuesta de error (400):

{
  "message": "User location not found"
}

GET /api/v1/products/{id}

Obtiene un producto específico por su ID.

URL: /api/v1/products/{id}

Método: GET

Parámetros de ruta: - id: ID único del producto

Ejemplo:

GET /api/v1/products/507f1f77bcf86cd799439011

Respuesta exitosa (200):

{
  "product": {
    "_id": "507f1f77bcf86cd799439011",
    "name": "Manzanas Rojas",
    "description": "Manzanas rojas frescas del valle",
    "price": 2.50,
    "quantity": 100,
    "image": "https://ejemplo.com/manzanas.jpg",
    "stock": 50,
    "measureUnit": "507f1f77bcf86cd799439012",
    "measurement": "507f1f77bcf86cd799439013",
    "category": "507f1f77bcf86cd799439014",
    "user": "507f1f77bcf86cd799439015"
  }
}

GET /api/v1/products/category/{id}

Obtiene todos los productos de una categoría específica.

URL: /api/v1/products/category/{id}

Método: GET

Parámetros de ruta: - id: ID de la categoría

Ejemplo:

GET /api/v1/products/category/507f1f77bcf86cd799439014

Respuesta exitosa (200):

{
  "products": [
    {
      "_id": "507f1f77bcf86cd799439011",
      "name": "Manzanas Rojas",
      "description": "Manzanas rojas frescas del valle",
      "price": 2.50,
      "quantity": 100,
      "image": "https://ejemplo.com/manzanas.jpg",
      "stock": 50,
      "measureUnit": "507f1f77bcf86cd799439012",
      "measurement": "507f1f77bcf86cd799439013",
      "category": "507f1f77bcf86cd799439014",
      "user": "507f1f77bcf86cd799439015"
    }
  ]
}

GET /api/v1/products/user/ownProducts

Obtiene todos los productos creados por el usuario autenticado.

URL: /api/v1/products/user/ownProducts

Método: GET

Headers:

Authorization: Bearer <token>

Respuesta exitosa (200):

{
  "products": [
    {
      "_id": "507f1f77bcf86cd799439011",
      "name": "Manzanas Rojas",
      "description": "Manzanas rojas frescas del valle",
      "price": 2.50,
      "quantity": 100,
      "image": "https://ejemplo.com/manzanas.jpg",
      "stock": 50,
      "measureUnit": "507f1f77bcf86cd799439012",
      "measurement": "507f1f77bcf86cd799439013",
      "category": "507f1f77bcf86cd799439014",
      "user": "507f1f77bcf86cd799439015"
    }
  ]
}

PATCH /api/v1/products/update/{id}

Actualiza un producto existente.

URL: /api/v1/products/update/{id}

Método: PATCH

Headers:

Authorization: Bearer <token>
Content-Type: application/json

Parámetros de ruta: - id: ID del producto a actualizar

Body:

{
  "name": "Manzanas Rojas Premium",
  "description": "Manzanas rojas premium del valle",
  "price": 3.00,
  "quantity": 150,
  "image": "https://ejemplo.com/manzanas-premium.jpg",
  "stock": 75
}

Respuesta exitosa (200):

{
  "product": {
    "_id": "507f1f77bcf86cd799439011",
    "name": "Manzanas Rojas Premium",
    "description": "Manzanas rojas premium del valle",
    "price": 3.00,
    "quantity": 150,
    "image": "https://ejemplo.com/manzanas-premium.jpg",
    "stock": 75,
    "measureUnit": "507f1f77bcf86cd799439012",
    "measurement": "507f1f77bcf86cd799439013",
    "category": "507f1f77bcf86cd799439014",
    "user": "507f1f77bcf86cd799439015"
  }
}

Respuesta de error (401):

{
  "message": "No tienes permiso para actualizar este producto"
}

DELETE /api/v1/products/delete/{id}

Elimina un producto del sistema.

URL: /api/v1/products/delete/{id}

Método: DELETE

Headers:

Authorization: Bearer <token>

Parámetros de ruta: - id: ID del producto a eliminar

Respuesta exitosa (200):

{
  "message": "Producto eliminado exitosamente"
}

Respuesta de error (400):

{
  "message": "No tienes permiso para eliminar este producto"
}

POST /api/v1/products/buy/{id}

Compra un producto usando los créditos del usuario.

URL: /api/v1/products/buy/{id}

Método: POST

Headers:

Authorization: Bearer <token>

Parámetros de ruta: - id: ID del producto a comprar

Respuesta exitosa (200):

{
  "message": "Producto comprado exitosamente",
  "remainingCredits": 147.50
}

Respuesta de error (400):

{
  "error": "No tienes suficiente saldo"
}

Códigos de Error Comunes

Código Descripción
400 Error en los datos de entrada o saldo insuficiente
401 Token de autenticación inválido o faltante
404 Producto no encontrado
500 Error interno del servidor

Notas Importantes

  • Solo el propietario del producto puede actualizarlo o eliminarlo
  • Los productos se pueden comprar usando créditos del usuario
  • El stock se actualiza automáticamente al comprar
  • Las imágenes deben ser URLs válidas
  • Los precios deben ser números positivos
  • Las cantidades deben ser números enteros positivos