Next js hexagonal ejercicio 1
Ejercicio practico de arquitectura hexagonal con Nextjs usando app router
Nextjs hexagonal: ej 1
Ejercicio sencillo de arquitecura hexagonal utilizando NextJs +14 con app router y tailwindcss. Enfocado al frontend.
Proceso
1. Estructura app
npx create-next-app@latest
- Iniciar la aplicación usando el comando de NextJs, usando la carpeta "src".
Estructura hexagonal
- Definir las carpetas de una arquitectura hexagonal, en una carpeta llamada "core".
Creación domain y app
- Para esta aplicación tendremos que cumplir estas reglas:
- Usuarios con: id(único, puedes generarlo con la fecha + nombre), nombre, roleId (id que lo vincula a otra tabla con su rol, el cual podrá no existir, con lo cual significara que es un usuario normal), createdAt(timestamp de creación) y updatedAt(timestamp de edit).
- Roles con: id(único, puedes generarlo con la fecha + nombre), nombre(nombre del usuario), permissions (tipo de permiso, definido en un enum, con las opciones: "ADMIN", "STUDENT", "STUDENT_PRO"), createdAt(timestamp de creación) y updatedAt(timestamp de edit).
- 🙋♂️💡⏫ Para este caso puedes utilizar tipos "string" para las fechas, ya que no usaremos persistencia para nuestro primer repositorio de infraestructura.
- Para los repositorios, necesitaremos definir funciones para "CRUD", en el caso del "Read", buscaremos por id y también todos en el caso de los usuarios. En el caso de los roles definiremos una función para devolver todos los "roles" con un permissions especifico (por ejemplo, todos los administradores)
- Creación del dominio.
- Creación de los use-cases necesarios.
- También puedes realizar la infraestructura, creando así toda la aplicación hexagonal. Sino deberás crear esta parte después.
2. Users
InMemoryUserRepository
, "Create" user and "Read" users
- Crear
InMemoryUserRepository
, si todavía no se ha hecho. - En "actions", crearemos funciones para "Create" usuarios, utilizando SSR.
- En nuestra pagina, implementaremos un componente con un formulario para crear el usuario.
- Haremos lo mismo con el "Read", el cual deberá devolver todos los usuarios.
- Puedes utilizar estos template para empezar:
-> componentes 📋
"Update" user
- Crearemos la acción de hacer update en actions, implementando-la en una pagina dinámica, la cual utilizara el componente del formulario del usuario.
- 🧑🎓⚠️➡️ En este punto: Solo tendremos un formulario para el usuario, el cual se utilizara para crear y hacer update.
- Implementaremos un botón en la tabla de usuarios, que al hacer click nos lleve al formulario para hacer update del usuario escogido (en el template de la tabla puedes encontrar unos estilos para utilizarlo).
"Delete" user
- Crearemos la acción de hacer delete, implementando-la en un componente, el cual utilizaremos en la tabla de usuarios. Para el botón puedes utilizar este template:
⚠️ Tienes que estar verificado para ver este contenido