Construyendo LIA (Parte 1): Registro con Clean Architecture y Argon2id

Implementación de registro con Clean Architecture en Fastify y Prisma. Uso de Argon2id, casos de uso y controladores. Aprende arquitectura limpia.

15 jul 2026 • 4 min de lectura • Equipo Q2BSTUDIO

Arquitectura limpia y seguridad con Argon2id en Fastify y Prisma

El desarrollo de una plataforma digital que conecte personas con oportunidades laborales en contextos hiperlocales requiere mucho más que un simple panel de ofertas: exige una arquitectura sólida que garantice seguridad, escalabilidad y mantenibilidad desde el primer día. En este artículo exploramos cómo abordar el diseño del módulo de registro de usuarios utilizando Clean Architecture y Argon2id, dos decisiones técnicas que marcan la diferencia en proyectos donde la confianza y el rendimiento son críticos. A través de este caso práctico, veremos cómo estas prácticas se alinean con el desarrollo de aplicaciones a medida que buscan resolver problemas reales sin depender de soluciones genéricas.

Cuando se construye una plataforma de empleabilidad para una región específica —como un distrito costero aislado—, la lógica de negocio debe reflejar las necesidades locales antes que las abstracciones de un buscador nacional. La arquitectura limpia (Clean Architecture) propone separar el dominio del negocio de los detalles técnicos, de modo que las reglas fundamentales (validación de datos, unicidad del correo, hash de contraseña) vivan en un núcleo independiente de frameworks, bases de datos o interfaces de usuario. Esta separación permite que el código evolucione sin romper lo esencial, algo vital cuando el proyecto crece o se integra con servicios cloud AWS y Azure para escalar horizontalmente.

En el corazón del registro encontramos la entidad Usuario, definida como una interfaz simple: identificador, nombre, correo, contraseña, fechas de creación y actualización. Sin anotaciones de ORM ni decoradores, porque el dominio no debe conocer la tecnología de persistencia. El repositorio, también una interfaz, declara los contratos: crear un usuario y buscar por correo. Nota importante: el método de creación nunca devuelve el hash de la contraseña, lo que refuerza una política de seguridad que evita fugas de credenciales desde el tipo de dato mismo. Esta decisión es un ejemplo de cómo la ciberseguridad debe integrarse en el diseño, no añadirse como capa tardía. En Q2BSTUDIO, cuando desarrollamos software a medida, aplicamos este principio desde la fase de modelado.

El caso de uso de registro es donde ocurre la magia: validaciones de campos obligatorios, verificación de unicidad del correo, generación del hash con Argon2id y delegación al repositorio. Argon2id se elige sobre bcrypt por su resistencia a ataques con GPU, siguiendo las recomendaciones actuales de OWASP. Aquí se asume una configuración por defecto (coste, memoria, paralelismo) como un compromiso válido para un MVP, pero documentado explícitamente para que en futuras iteraciones se ajusten los parámetros. Esta transparencia evita que una decisión técnica quede enterrada en el código.

La capa de infraestructura implementa el repositorio usando Prisma sobre PostgreSQL. En la función de creación se usa una cláusula select para excluir explícitamente el hash de la respuesta, duplicando la garantía de que ningún endpoint devuelva datos sensibles. El patrón de adaptador de Prisma 7 simplifica la conexión directa contra pg, y esta configuración queda registrada en un registro de decisiones arquitectónicas (ADR) para que futuros cambios no introduzcan configuraciones obsoletas.

La presentación (controlador y rutas) se limita a traducir HTTP: recibe la petición, llama al caso de uso y, si ocurre un error de negocio (AppError con código HTTP), lo transforma en una respuesta JSON con el código adecuado. Este error personalizado se lanza desde la capa de aplicación sin importar nada de HTTP, manteniendo el dominio puro. La inyección por constructor permite probar el controlador sin levantar el servidor.

Para un desarrollador solitario o un equipo pequeño, aplicar esta separación desde el primer endpoint puede parecer excesivo, pero la experiencia demuestra que reduce drásticamente la deuda técnica. Cuando más adelante se necesite escalar con inteligencia artificial para recomendar ofertas, o incorporar agentes IA que automaticen la preselección, la arquitectura ya estará preparada para añadir esos módulos sin reescribir todo. Asimismo, si el proyecto requiere dashboards de análisis, los servicios inteligencia de negocio como Power BI pueden consumir datos limpios gracias a la separación de responsabilidades.

En Q2BSTUDIO entendemos que cada proyecto tiene sus propias restricciones. Por eso ofrecemos servicios cloud AWS y Azure para desplegar aplicaciones con alta disponibilidad, y servicios inteligencia de negocio para convertir datos en decisiones. Además, nuestra experiencia en ia para empresas nos permite integrar modelos predictivos que mejoren la empleabilidad. La clave está en empezar con una base sólida: capas bien definidas, seguridad desde el diseño y documentación de las decisiones técnicas.

En conclusión, construir un módulo de registro con Clean Architecture y Argon2id no es un lujo técnico, sino una inversión en la sostenibilidad del proyecto. La disciplina de separar intereses, forzar políticas de seguridad en los tipos de datos y documentar los porqués marca la diferencia entre un código que sobrevive a los cambios y uno que se vuelve frágil. La Parte 2 de esta serie abordará el frontend de registro y las próximas mejoras en validación, pero por ahora queda claro que la base técnica es tan importante como la visión de negocio.

¿UNA PAUSA?

Juega un momento antes de irte

NUESTROS SERVICIOS

Cómo podemos ayudarte

¿Tienes un proyecto en mente?

Cuéntanos tu visión y la convertimos en una solución de software. Sea cual sea el alcance, hacemos realidad tu idea.