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 proveedoresGET /proveedores/{id}- Obtener proveedor por IDPOST /proveedores- Crear proveedorPATCH /proveedores/{id}- Actualizar proveedorDELETE /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 |
| 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:
passwordforma parte del modelo de entrada, pero no se expone enProveedorResponseDto.
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 |
| 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. |
| 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."
}