Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Objetos de transferencia separados del modelo

5 tareas · 40 min · Principiante

Un objeto de transferencia describe lo que un caso de uso acepta, sin arrastrar todo lo que la base guarda. Bien usado, corta la asignación masiva de raíz; declarado y no aplicado, solo da tranquilidad. El servicio de contratos de Pulsoandino, escrito en TypeScript, pasó una revisión en junio «sin hallazgos». Te entregan sus tipos, sus tres rutas de escritura y el registro de cambios de dos semanas.

0 de 5 · 0%

Objetivo de la sala

Un objeto de transferencia describe lo que un caso de uso acepta, sin arrastrar todo lo que la base guarda. Bien usado, corta la asignación masiva de raíz; declarado y no aplicado, solo da tranquilidad. El servicio de contratos de Pulsoandino, escrito en TypeScript, pasó una revisión en junio «sin hallazgos». Te entregan sus tipos, sus tres rutas de escritura y el registro de cambios de dos semanas.

La entidad (o modelo) representa lo que se guarda: un contrato tiene socio, sede, plan, valor mensual, día de cobro, estado y fecha de fin de congelamiento. Un objeto de transferencia de datos (DTO, por sus siglas en inglés) representa lo que un caso de uso concreto acepta o devuelve: para que el socio cambie su día de cobro bastan dos campos. Separarlos tiene dos efectos: el cliente nunca enlaza contra la entidad, y cada rol tiene su propio objeto (el del socio no es el del gerente).

La guía de OWASP sobre asignación masiva pone esta separación como la primera opción, y aclara un límite: el DTO decide qué propiedades se pueden escribir, pero no reemplaza la comprobación de que esa persona puede tocar ese objeto.

Responde para continuar

¿Qué aporta un objeto de transferencia propio para la ruta en que el socio edita su contrato?

Ver pista de ayuda

Piensa en la diferencia entre lo que se guarda y lo que un caso de uso acepta.

Abre el laboratorio, entra en la carpeta pulsoandino-contratos y compara las tres rutas de contratos.rutas.ts. Dos crean un objeto nuevo con los campos validados y los copian uno a uno sobre el contrato. La primera declara su tipo de entrada en la firma y copia el cuerpo entero con Object.assign, que pasa al objeto destino todas las propiedades propias del origen.

Ahora busca en registro-contratos.txt qué hizo eso en la práctica.

Responde para continuar

¿Qué contrato quedó con un valor mensual que ningún gerente ajustó? Escribe su código.

Ver pista de ayuda

El único ajuste de valor legítimo llega por la ruta de la sede.

Lee nota-revision-anterior.txt. La conclusión confunde dos cosas que en TypeScript viven en momentos distintos: lo que el compilador comprueba al escribir el código y lo que el programa hace al recibir la petición.

Responde para continuar

¿Por qué el tipo ActualizarContratoDto no impidió que se guardara un campo de más?

Ver pista de ayuda

Pregúntate qué queda del tipo cuando el código ya se está ejecutando.

El valor mensual no es la única propiedad de la entidad que la ruta del socio deja escribir. Revisa en el registro qué otro cambio llegó por esa misma ruta y que en el negocio corresponde a una renovación.

Responde para continuar

¿Qué contrato terminado volvió a quedar activo desde la ruta del socio? Escribe su código.

Ver pista de ayuda

Busca un cambio de estado en una línea de PATCH sobre /contratos/mios.

Un informe útil no solo señala lo roto: también muestra lo que sí funciona, para que el equipo copie el patrón correcto. En el registro hay una petición a una ruta que copia campo a campo y que trajo un nombre de campo de más; el cambio aplicado muestra que ese campo se ignoró.

Responde para continuar

¿En qué contrato se ve que la ruta que copia campo a campo ignoró un campo que sobraba? Escribe su código.

Ver pista de ayuda

Compara los nombres recibidos con los cambios aplicados en la ruta de congelar.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad