Huella Verde del Producto - bootcamp-uchile-2026/grupo-2-backend GitHub Wiki
Huella Verde del Producto
La funcionalidad Huella Verde del Producto permite mostrar información asociada al carácter sustentable de un producto disponible en BuenOrigen.
Esta información puede ser presentada dentro del detalle del producto y permite que Frontend y Mobile comuniquen al usuario aspectos relacionados con los materiales, la elaboración y la evaluación sustentable del producto.
Desde la perspectiva Backend, esta funcionalidad consiste en recibir el identificador de un producto, verificar que exista y devolver la información de Huella Verde asociada.
Objetivo
Proporcionar a Frontend y Mobile información resumida sobre las características sustentables de un producto determinado.
Estado
Implementado
La funcionalidad se encuentra implementada mediante:
ProductosModule
|
v
ProductosController
|
v
ProductosService
|
v
HuellaVerdeProductoDto
Responsabilidad Backend
Actualmente el Backend debe:
- Recibir el identificador del producto.
- Transformar
productoIda un número entero. - Verificar que el producto exista.
- Consultar la información de Huella Verde asociada al producto.
- Entregar información relacionada con los materiales utilizados.
- Entregar información relacionada con la elaboración.
- Entregar la calificación sustentable cuando exista.
- Transformar la información a
HuellaVerdeProductoDto. - Manejar el caso en que el producto exista pero todavía no posea información de Huella Verde.
- Responder
404 Not Foundcuando el producto no exista.
Contrato de API
Endpoint
GET /productos/:productoId/huella-verde
Ejemplo:
GET /productos/1/huella-verde
Parámetro de Ruta
productoId
Tipo esperado:
number
DTO de salida
HuellaVerdeProductoDto
La definición general del endpoint se encuentra centralizada en:
La estructura completa del DTO se encuentra documentada en:
Parámetro productoId
El Controller recibe el identificador mediante:
@Param('productoId', ParseIntPipe) productoId: number
Los parámetros incluidos en una URL llegan inicialmente como texto.
Por ejemplo:
GET /productos/1/huella-verde
entrega inicialmente:
"1"
ParseIntPipe transforma ese valor en:
1
antes de entregarlo al método del Controller.
Conceptualmente:
HTTP
"1"
|
v
ParseIntPipe
|
v
1
|
v
ProductosController
Validación mediante ParseIntPipe
Si el identificador posee un formato válido:
GET /productos/1/huella-verde
el parámetro puede transformarse correctamente a:
1
Sin embargo, una solicitud como:
GET /productos/abc/huella-verde
no contiene un identificador entero válido.
En ese caso, NestJS responde:
400 Bad Request
antes de ejecutar la lógica de ProductosService.
Conceptualmente:
productoId
|
v
ParseIntPipe
|
+--+--+
| |
Sí No
| |
v v
number 400 Bad Request
|
v
ProductosService
Verificación del Producto
Una vez recibido un identificador válido, el Service verifica que el producto exista.
Conceptualmente:
Producto[]
|
| find()
v
producto.id === productoId
|
+--+--+
| |
Sí No
| |
v v
Producto undefined
Si el producto no existe, el Backend genera:
NotFoundException
y responde:
404 Not Found
Información de Huella Verde
La información inicial de Huella Verde está compuesta por:
Huella Verde
|
+---- Calificación sustentable
|
+---- Materiales
|
+---- Elaboración
Estos datos se encuentran representados mediante:
HuellaVerdeProductoDto
HuellaVerdeProductoDto
La estructura utilizada corresponde a:
export class HuellaVerdeProductoDto {
calificacionSustentable: number | null;
materiales: string[];
elaboracion: string | null;
}
Por lo tanto, la respuesta contiene:
| Campo | Tipo | Descripción |
|---|---|---|
calificacionSustentable |
number | null |
Evaluación sustentable del producto |
materiales |
string[] |
Materiales utilizados |
elaboracion |
string | null |
Descripción resumida de su elaboración |
Modelo Backend
La información de Huella Verde se mantiene separada del modelo principal Producto.
Conceptualmente:
Producto
|
| id
|
v
HuellaVerde
|
+---- productoId
+---- calificacionSustentable
+---- materiales
+---- elaboracion
La relación se establece mediante:
productoId: number;
Una representación conceptual es:
export class HuellaVerde {
productoId: number;
calificacionSustentable: number | null;
materiales: string[];
elaboracion: string | null;
}
Relación entre Producto y Huella Verde
Conceptualmente:
Producto
|
| id
v
HuellaVerde
|
| productoId
v
Información sustentable
Por ejemplo:
{
productoId: 1,
calificacionSustentable: 4.8,
materiales: [
'Algodón orgánico',
'Tintes naturales',
],
elaboracion:
'Producto confeccionado utilizando procesos de bajo impacto ambiental.',
}
indica que esta información corresponde al:
Producto 1
Búsqueda de Huella Verde
Después de verificar que el producto exista, el Service busca la información asociada mediante:
productoId
Conceptualmente:
HuellaVerde[]
|
| find()
v
huella.productoId === productoId
|
+----+----+
| |
Existe No existe
| |
v v
Datos Valores
reales vacíos
Producto con Información de Huella Verde
Si existe información asociada al producto, el Backend construye:
HuellaVerdeProductoDto
con los valores disponibles.
Ejemplo:
{
"calificacionSustentable": 4.8,
"materiales": [
"Algodón orgánico",
"Tintes naturales"
],
"elaboracion": "Producto confeccionado utilizando algodón orgánico y procesos de bajo impacto ambiental."
}
Respuesta HTTP:
200 OK
Producto sin Información de Huella Verde
La ausencia de Huella Verde no significa que el producto no exista.
Si el producto existe pero todavía no posee información asociada, el Backend puede devolver:
{
"calificacionSustentable": null,
"materiales": [],
"elaboracion": null
}
con:
200 OK
Conceptualmente:
Producto existe
|
v
Buscar Huella Verde
|
v
No existe información
|
v
{
calificacionSustentable: null,
materiales: [],
elaboracion: null
}
|
v
200 OK
Este comportamiento permite distinguir entre:
Producto inexistente
|
v
404 Not Found
y:
Producto existente
sin Huella Verde
|
v
200 OK
con datos vacíos
Calificación Sustentable
La propiedad:
calificacionSustentable: number | null;
representa una evaluación resumida de sustentabilidad.
Actualmente se utiliza conceptualmente una escala:
1 a 5
donde valores mayores representan una mejor evaluación sustentable.
Por ejemplo:
4.8
Si todavía no existe una evaluación:
{
"calificacionSustentable": null
}
Método de Cálculo
Actualmente el Backend no calcula dinámicamente la calificación sustentable.
La información se encuentra almacenada directamente como parte de los datos de Huella Verde.
Por lo tanto:
calificacionSustentable
|
v
Dato almacenado
y no:
materiales
+
proceso
+
emisiones
+
otros factores
|
v
algoritmo automático
|
v
calificación
El mecanismo definitivo para calcular o asignar esta calificación permanece pendiente de definición.
Materiales
La propiedad:
materiales: string[];
contiene los principales materiales utilizados en el producto.
Ejemplo:
[
"Algodón orgánico",
"Tintes naturales"
]
Si todavía no existe información:
[]
continúa siendo un valor válido.
Elaboración
La propiedad:
elaboracion: string | null;
permite entregar una descripción resumida del proceso de elaboración.
Ejemplo:
Producto confeccionado utilizando algodón orgánico y procesos de bajo impacto ambiental.
Si todavía no existe información:
{
"elaboracion": null
}
Flujo Completo de la Operación
GET /productos/1/huella-verde
|
v
ParseIntPipe
|
v
productoId: 1
|
v
ProductosController
|
v
ProductosService
|
| find()
v
¿Existe producto?
|
+----+----+
| |
Sí No
| |
v v
Buscar 404
Huella Not Found
|
v
¿Existe información?
|
+--+--+
| |
Sí No
| |
v v
Datos null / [] / null
| |
+-----+----+
|
v
HuellaVerdeProductoDto
|
v
200 OK
Ejemplo de Solicitud
GET /productos/1/huella-verde
Ejemplo de Respuesta Exitosa
{
"calificacionSustentable": 4.8,
"materiales": [
"Algodón orgánico",
"Tintes naturales"
],
"elaboracion": "Producto confeccionado utilizando algodón orgánico y procesos de bajo impacto ambiental."
}
Respuesta:
200 OK
Manejo de Errores
Identificador inválido
Ejemplo:
GET /productos/abc/huella-verde
Respuesta:
400 Bad Request
Gestionado mediante:
ParseIntPipe
Producto inexistente
Ejemplo:
GET /productos/999/huella-verde
Si el producto no existe:
404 Not Found
Respuestas HTTP
| Código | Situación |
|---|---|
200 OK |
Información de Huella Verde obtenida correctamente |
200 OK con valores vacíos |
El producto existe pero todavía no posee información de Huella Verde |
400 Bad Request |
productoId no corresponde a un entero válido |
404 Not Found |
El producto solicitado no existe |
Reglas de Negocio Actuales
Actualmente las reglas pueden resumirse como:
1. productoId debe ser un entero válido.
2. El producto debe existir.
3. Si el producto no existe:
404 Not Found.
4. Si existe:
buscar Huella Verde mediante productoId.
5. Si existe información:
devolver sus datos.
6. Si no existe información:
devolver:
{
calificacionSustentable: null,
materiales: [],
elaboracion: null
}.
7. La consulta no modifica la información.
Responsabilidades Pendientes de Definición
Aunque la consulta ya se encuentra implementada, todavía pueden definirse reglas adicionales relacionadas con:
quién registra la información
quién valida la información
quién puede actualizarla
cómo se calcula la calificación
qué criterios sustentables deben considerarse
Estas responsabilidades podrán formar parte posteriormente de funcionalidades administrativas o de la cuenta del emprendedor.
Relación con Detalle de Producto
La Huella Verde corresponde a información ampliada asociada a:
Sin embargo, utiliza un endpoint independiente.
Detalle de Producto
|
+----------------------------+
| |
v v
ProductoDetalleDto Huella Verde
|
v
HuellaVerdeProductoDto
Frontend puede construir una misma página utilizando ambos contratos.
Separación de Responsabilidades
El endpoint principal:
GET /productos/:productoId
devuelve:
ProductoDetalleDto
mientras que:
GET /productos/:productoId/huella-verde
devuelve:
HuellaVerdeProductoDto
Conceptualmente:
Producto
|
+--> Información general
| |
| v
| ProductoDetalleDto
|
+--> Información sustentable
|
v
HuellaVerdeProductoDto
Documentación Swagger
El endpoint se encuentra documentado mediante decoradores de @nestjs/swagger.
Entre ellos:
@ApiOperation()
@ApiParam()
@ApiOkResponse()
@ApiNotFoundResponse()
El parámetro:
productoId
se documenta como:
Number
y la respuesta exitosa utiliza:
HuellaVerdeProductoDto
Para mayor información consultar:
Posibles Mejoras Futuras
Posteriormente podrán evaluarse funcionalidades como:
- Definir el método de cálculo de la calificación sustentable.
- Incorporar certificaciones.
- Incorporar origen de materiales.
- Incorporar información de reciclabilidad.
- Incorporar huella de carbono.
- Incorporar lugar de fabricación.
- Incorporar validación administrativa de la información.
- Permitir que un emprendedor registre o actualice los datos.
- Mantener historial de modificaciones.
Estas mejoras deberán implementarse cuando formen parte de las reglas funcionales de BuenOrigen.
Relación con la Arquitectura
La funcionalidad pertenece actualmente al dominio:
Productos
y utiliza:
ProductosModule
|
v
ProductosController
|
v
ProductosService
|
v
HuellaVerdeProductoDto
Páginas relacionadas: