docs: update README to reflect Person model and /people migration
This commit is contained in:
@@ -24,10 +24,10 @@ Stock Manager permite gestionar:
|
|||||||
- **Ítems genéricos**: productos gestionados por cantidad de stock.
|
- **Ítems genéricos**: productos gestionados por cantidad de stock.
|
||||||
- **Activos serializados**: equipos individuales con número de serie único.
|
- **Activos serializados**: equipos individuales con número de serie único.
|
||||||
- **Categorías**: clasificación de ítems y activos.
|
- **Categorías**: clasificación de ítems y activos.
|
||||||
- **Destinatarios**: personas o departamentos que reciben asignaciones.
|
- **Personas**: personas o departamentos que reciben asignaciones. Cada persona puede tener un usuario del sistema vinculado o existir sin credenciales.
|
||||||
- **Asignaciones**: entrega y devolución de ítems o activos.
|
- **Asignaciones**: entrega y devolución de ítems o activos.
|
||||||
- **Movimientos**: historial auditable de entradas, salidas, asignaciones, devoluciones y ajustes.
|
- **Movimientos**: historial auditable de entradas, salidas, asignaciones, devoluciones y ajustes.
|
||||||
- **Usuarios admin**: gestión de usuarios, roles, estado activo y reseteo de contraseña.
|
- **Usuarios del sistema**: gestión unificada con personas, roles, estado activo y reseteo de contraseña.
|
||||||
- **Importación CSV**: flujo legacy de importación masiva, mantenido estructuralmente pero pendiente de rediseño.
|
- **Importación CSV**: flujo legacy de importación masiva, mantenido estructuralmente pero pendiente de rediseño.
|
||||||
|
|
||||||
## Stack técnico
|
## Stack técnico
|
||||||
@@ -53,8 +53,8 @@ Superficies localizadas:
|
|||||||
|
|
||||||
- **Login** y navbar compartida con selector de idioma compacto.
|
- **Login** y navbar compartida con selector de idioma compacto.
|
||||||
- **Shell común**: sidebar, navegación, search, paginación, botón submit, página de acceso denegado.
|
- **Shell común**: sidebar, navegación, search, paginación, botón submit, página de acceso denegado.
|
||||||
- **Inventario**: categorías, ítems, activos, destinatarios, asignaciones, movimientos.
|
- **Inventario**: categorías, ítems, activos, personas, asignaciones, movimientos.
|
||||||
- **Admin**: gestión de usuarios, roles y estado.
|
- **Personas**: gestión unificada de personas y usuarios del sistema.
|
||||||
|
|
||||||
La arquitectura i18n sigue un patrón consistente:
|
La arquitectura i18n sigue un patrón consistente:
|
||||||
|
|
||||||
@@ -233,7 +233,7 @@ src/
|
|||||||
├── actions/ # Server Actions finas
|
├── actions/ # Server Actions finas
|
||||||
├── app/ # Next.js App Router
|
├── app/ # Next.js App Router
|
||||||
│ ├── (auth)/ # Login
|
│ ├── (auth)/ # Login
|
||||||
│ ├── (dashboard)/ # Dashboard, inventario, asignaciones, importación, admin
|
│ ├── (dashboard)/ # Dashboard, inventario, asignaciones, importación, people
|
||||||
│ ├── api/ # API routes
|
│ ├── api/ # API routes
|
||||||
│ └── forbidden/ # Página de acceso denegado
|
│ └── forbidden/ # Página de acceso denegado
|
||||||
├── components/ # Componentes compartidos y UI
|
├── components/ # Componentes compartidos y UI
|
||||||
@@ -258,7 +258,7 @@ prisma/
|
|||||||
- Login con NextAuth credentials.
|
- Login con NextAuth credentials.
|
||||||
- Passwords hasheadas con `bcryptjs`.
|
- Passwords hasheadas con `bcryptjs`.
|
||||||
- Roles soportados: `ADMIN`, `MANAGER`, `STAFF`, `VIEWER`.
|
- Roles soportados: `ADMIN`, `MANAGER`, `STAFF`, `VIEWER`.
|
||||||
- `/admin/*` requiere rol `ADMIN`.
|
- `/people/*` requiere rol `ADMIN` para operaciones de gestión.
|
||||||
- Usuarios inactivos no pueden iniciar sesión.
|
- Usuarios inactivos no pueden iniciar sesión.
|
||||||
|
|
||||||
Helpers relevantes:
|
Helpers relevantes:
|
||||||
@@ -275,8 +275,8 @@ Entidades principales:
|
|||||||
|
|
||||||
| Entidad | Descripción |
|
| Entidad | Descripción |
|
||||||
|---------|-------------|
|
|---------|-------------|
|
||||||
| `User` | Usuarios del sistema y roles |
|
| `User` | Usuarios del sistema, roles y estados de ciclo de vida |
|
||||||
| `Recipient` | Destinatarios de asignaciones |
|
| `Person` | Personas del organigrama; pueden vincularse a un `User` |
|
||||||
| `Category` | Categorías de inventario |
|
| `Category` | Categorías de inventario |
|
||||||
| `Item` | Ítems genéricos con stock |
|
| `Item` | Ítems genéricos con stock |
|
||||||
| `Asset` | Activos serializados |
|
| `Asset` | Activos serializados |
|
||||||
@@ -311,11 +311,26 @@ prisma/schema.prisma
|
|||||||
|
|
||||||
### Usuarios
|
### Usuarios
|
||||||
|
|
||||||
- Sólo `ADMIN` puede gestionar usuarios.
|
- Sólo `ADMIN` puede gestionar personas y usuarios.
|
||||||
- No se puede quitar el propio acceso admin.
|
- No se puede quitar el propio acceso admin.
|
||||||
- No se puede dejar el sistema sin admin activo.
|
- No se puede dejar el sistema sin admin activo.
|
||||||
- La protección de último admin usa transacción serializable con retry de conflictos Prisma `P2034`.
|
- La protección de último admin usa transacción serializable con retry de conflictos Prisma `P2034`.
|
||||||
|
|
||||||
|
## Transición de arquitectura
|
||||||
|
|
||||||
|
La aplicación está migrando de un modelo separado de usuarios y destinatarios hacia una gestión unificada de personas:
|
||||||
|
|
||||||
|
| Antes | Después |
|
||||||
|
|-------|---------|
|
||||||
|
| `Recipient` | `Person` |
|
||||||
|
| Gestión en `/admin/users` | Gestión en `/people` |
|
||||||
|
| Usuarios y personas desvinculados | Persona puede vincularse a un `User` opcional |
|
||||||
|
|
||||||
|
Estado actual:
|
||||||
|
|
||||||
|
- El schema Prisma y la migración inicial reflejan el nuevo modelo.
|
||||||
|
- Las rutas y componentes de UI ya fueron migrados a `/people`.
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
El proyecto tiene una base inicial de tests en tres niveles:
|
El proyecto tiene una base inicial de tests en tres niveles:
|
||||||
|
|||||||
Reference in New Issue
Block a user