Proveedores - bootcamp-uchile-2026/grupo-4-backend GitHub Wiki

Proveedores

Servicio encargado de gestionar los proveedores locales que ofrecen productos artesanales dentro del ecommerce.

El servicio permite consultar, crear, actualizar y eliminar proveedores.

Endpoints

  • 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

Modelo

Proveedor

Representa un proveedor de productos artesanales dentro del sistema.

Campo Tipo Descripción
id number Identificador único del proveedor
nombre string Nombre del proveedor
descripcion string Descripción del proveedor
email string Correo electrónico del proveedor
telefono string Número de teléfono del proveedor
password string Contraseña utilizada para la autenticación del proveedor

Seguridad: password forma parte del modelo de entrada, pero no se expone en ProveedorResponseDto.

DTOs

CreateProveedorDto

DTO utilizado para crear un nuevo proveedor.

Campos

Campo Tipo Requerido Descripción
nombre string Sí Nombre del proveedor
descripcion string Sí Descripción del proveedor
email string Sí Correo electrónico del proveedor
telefono string Sí Número de teléfono del proveedor
password string Sí Contraseña del proveedor

Validaciones definidas

Campo Validaciones
nombre Debe ser texto, no estar vacío ni contener únicamente espacios en blanco.
descripcion Debe ser texto, no estar vacía ni contener únicamente espacios en blanco.
email Debe tener formato de correo electrónico válido y no estar vacío.
telefono Debe ser texto, no estar vacío y cumplir el formato +569XXXXXXXX (ocho dígitos después de +569).
password Debe ser texto, no estar vacía y tener entre 8 y 72 caracteres.

Estas reglas están declaradas mediante decoradores de class-validator en CreateProveedorDto.

Ejemplo de Request Body

{
  "nombre": "Mermeladas del Valle",
  "descripcion": "Productor artesanal de mermeladas elaboradas con frutas de la zona central.",
  "email": "[email protected]",
  "telefono": "+56912345678",
  "password": "MiPassword123!"
}

UpdateProveedorDto

DTO utilizado para actualizar parcialmente un proveedor existente.

Hereda los campos y las reglas de validación de CreateProveedorDto mediante PartialType, pero todos los campos son opcionales.

Cuando se informa un campo, debe cumplir las mismas validaciones descritas en CreateProveedorDto.

Ejemplo de Request Body

{
  "nombre": "Mermeladas del Valle",
  "telefono": "+56998765432"
}

También es posible solicitar la actualización de la contraseña:

{
  "password": "NuevaPassword123!"
}

ProveedorResponseDto

DTO utilizado para representar un proveedor en las respuestas de la API.

Contiene id, nombre, descripcion, email y telefono. La contraseña no se incluye en las respuestas.

{
  "id": 1,
  "nombre": "Mermeladas del Valle",
  "descripcion": "Productor artesanal de mermeladas elaboradas con frutas de la zona central.",
  "email": "[email protected]",
  "telefono": "+56912345678"
}

Endpoints detallados

GET /proveedores

Obtiene una lista de todos los proveedores disponibles.

Response — 200 OK

[
  {
    "id": 1,
    "nombre": "Mermeladas del Valle",
    "descripcion": "Productor artesanal de mermeladas elaboradas con frutas de la zona central.",
    "email": "[email protected]",
    "telefono": "+56912345678"
  },
  {
    "id": 2,
    "nombre": "Aceites del Valle",
    "descripcion": "Productor de aceite de oliva artesanal.",
    "email": "[email protected]",
    "telefono": "+56987654321"
  }
]

GET /proveedores/{id}

Obtiene un proveedor específico mediante su identificador.

Path Parameters

Parámetro Tipo Requerido Descripción
id number Sí Identificador del proveedor, validado como entero mediante ParseIntPipe

Ejemplo de solicitud

GET /proveedores/1

Response — 200 OK

{
  "id": 1,
  "nombre": "Mermeladas del Valle",
  "descripcion": "Productor artesanal de mermeladas elaboradas con frutas de la zona central.",
  "email": "[email protected]",
  "telefono": "+56912345678"
}

Response — 400 Bad Request

El ID proporcionado no es válido.

{
  "statusCode": 400,
  "message": "El ID del proveedor no es válido."
}

Response — 404 Not Found

El proveedor no existe.

{
  "statusCode": 404,
  "message": "Proveedor no encontrado."
}

POST /proveedores

Crea un nuevo proveedor.

Request Body

Utiliza CreateProveedorDto, con los campos y validaciones descritos anteriormente.

{
  "nombre": "Mermeladas del Valle",
  "descripcion": "Productor artesanal de mermeladas elaboradas con frutas de la zona central.",
  "email": "[email protected]",
  "telefono": "+56912345678",
  "password": "MiPassword123!"
}

Response — 201 Created

{
  "id": 1,
  "nombre": "Mermeladas del Valle",
  "descripcion": "Productor artesanal de mermeladas elaboradas con frutas de la zona central.",
  "email": "[email protected]",
  "telefono": "+56912345678"
}

La contraseña no se incluye en la respuesta.

Response — 400 Bad Request

Los datos enviados no son válidos.

{
  "statusCode": 400,
  "message": "Los datos del proveedor no son válidos."
}

Response — 409 Conflict

Ya existe un proveedor con los datos proporcionados.

{
  "statusCode": 409,
  "message": "Ya existe un proveedor con los datos proporcionados."
}

PATCH /proveedores/{id}

Actualiza parcialmente los datos de un proveedor existente.

Path Parameters

Parámetro Tipo Requerido Descripción
id number Sí Identificador del proveedor, validado como entero mediante ParseIntPipe

Request Body

Utiliza UpdateProveedorDto. Todos los campos son opcionales, pero deben respetar las validaciones de CreateProveedorDto cuando se envían.

{
  "nombre": "Mermeladas del Valle",
  "telefono": "+56998765432"
}

También puede solicitarse la actualización de la contraseña:

{
  "password": "NuevaPassword123!"
}

Response — 200 OK

{
  "id": 1,
  "nombre": "Mermeladas del Valle",
  "descripcion": "Productor artesanal de mermeladas elaboradas con frutas de la zona central.",
  "email": "[email protected]",
  "telefono": "+56998765432"
}

Response — 400 Bad Request

El ID o los datos enviados no son válidos.

{
  "statusCode": 400,
  "message": "El ID o los datos del proveedor no son válidos."
}

Response — 404 Not Found

El proveedor no existe.

{
  "statusCode": 404,
  "message": "Proveedor no encontrado."
}

Response — 409 Conflict

Ya existe un proveedor con los datos proporcionados.

{
  "statusCode": 409,
  "message": "Ya existe un proveedor con los datos proporcionados."
}

DELETE /proveedores/{id}

Elimina un proveedor mediante su identificador.

Path Parameters

Parámetro Tipo Requerido Descripción
id number Sí Identificador del proveedor, validado como entero mediante ParseIntPipe

Ejemplo de solicitud

DELETE /proveedores/1

Response — 204 No Content

El proveedor fue eliminado correctamente.

No se retorna un cuerpo en la respuesta.

Response — 400 Bad Request

El ID proporcionado no es válido.

{
  "statusCode": 400,
  "message": "El ID del proveedor no es válido."
}

Response — 404 Not Found

El proveedor no existe.

{
  "statusCode": 404,
  "message": "Proveedor no encontrado."
}