Gograb Admin Mvp Plan

Documentation for GoGrab Admin

GoGrab Admin - MVP Implementation Plan (1 Week)

Documento: MVP Implementation Strategy Fecha: 2025-10-02 Timeline: 5 días laborables Objetivo: POC técnico demostrando integración con module system y routing dinámico

Resumen Ejecutivo

Este documento define el plan de implementación para un MVP simplificado de gograb-admin, optimizado para completarse en 1 semana mientras demuestra los conceptos arquitectónicos clave del sistema de módulos dinámicos.

Scope MVP

✅ MUST HAVE (Crítico - Días 1-3)

Objetivo: Demostrar arquitectura funcional básica

  1. Aplicación Base

    • App Angular 20 en /apps/gograb-admin
    • Configuración completa en app.config.ts
    • Port 5100 (evitar conflicto con gograb-space)
    • Build y serve funcionando
  2. Autenticación

    • Login component con reactive form
    • 2 usuarios mock:
    • authGuard implementado y funcionando
    • Redirección post-login a dashboard
  3. Layout Básico

    • AppShellComponent (router-outlet + estructura básica)
    • HeaderComponent minimal (logo + user profile)
    • FooterComponent simple (copyright + versión)
    • Sin sidebar complejo (navegación inline por ahora)
  4. Dashboard

    • Component simple con 3-4 stat cards
    • Datos mock (usuarios totales, activos, etc.)
    • Links a secciones principales
  5. Module System Integration

    • provideModuleIntegrator() en app.config.ts
    • Configuración básica de auto-discovery
    • Logging de ciclo de vida habilitado
    • Rutas de app base en app.routes.ts

✅ SHOULD HAVE (Demo - Día 4)

Objetivo: Completar demostración de funcionalidad

  1. User Management Integration (CRUD COMPLETO)

    • Integración con @gograb-space/user-management
    • Rutas cargadas dinámicamente (/list, /create, /:id, /:id/edit)
    • UserList con búsqueda y filtros (ya implementado)
    • Crear usuarios con UserFormComponent (ya implementado)
    • Editar usuarios con modo edit (ya implementado)
    • Ver detalles con UserDetailComponent (ya implementado)
    • Eliminar usuarios con confirmación (ya implementado)
    • Navegación completa entre todas las vistas CRUD
  2. Role-Based Access (Permisos Granulares)

    • Guards ya implementados en user-management routes:
      • users:read - Ver lista y detalles
      • users:create - Crear nuevos usuarios
      • users:update - Editar usuarios existentes
      • users:delete - Eliminar usuarios
      • users:manage - Gestión completa (admin only)
    • Admin puede acceder a todas las operaciones CRUD
    • Editor tiene acceso según permisos asignados
    • Validación automática en routing y UI components
  3. Navigation

    • Sidebar con acceso a:
      • Dashboard
      • Users → List (con botón Create si tiene permiso)
    • Active state indication
    • Role-based menu visibility
    • Breadcrumbs (posiblemente incluidos en user-management)

🎨 COULD HAVE (Polish - Día 5)

Objetivo: Refinamiento si queda tiempo

  1. Styling

    • Uso básico de @libs-core/ui-framework
    • Layout responsive simple
    • Colores y tipografía consistente
  2. Error Handling

    • Error boundary básico
    • 404 page
    • Login error messages
    • Loading states
  3. Logging

    • Console logs estructurados
    • Eventos de navegación
    • Lifecycle events visibles

✅ INCLUDED FROM user-management MODULE

Ya implementado en @gograb-space/user-management (NO requiere desarrollo):

IMPACTO EN MVP: Al integrar user-management dinámicamente, el MVP obtiene automáticamente funcionalidad CRUD completa y profesional. Solo necesitamos:

  1. Configurar provideModuleIntegrator correctamente
  2. Asegurar que las rutas se cargan dinámicamente
  3. Configurar mock users con permisos apropiados

❌ OUT OF SCOPE (Post-MVP)

Diferido a futuras iteraciones:

Arquitectura Simplificada

Directory Structure

apps/gograb-admin/
├── src/
│   ├── app/
│   │   ├── core/
│   │   │   └── layout/
│   │   │       ├── app-shell.component.ts (100 líneas)
│   │   │       ├── app-shell.component.html (30 líneas)
│   │   │       ├── header.component.ts (80 líneas)
│   │   │       ├── header.component.html (20 líneas)
│   │   │       ├── footer.component.ts (40 líneas)
│   │   │       └── footer.component.html (15 líneas)
│   │   ├── features/
│   │   │   ├── auth/
│   │   │   │   ├── login.component.ts (120 líneas)
│   │   │   │   ├── login.component.html (40 líneas)
│   │   │   │   └── login.component.scss (30 líneas)
│   │   │   └── dashboard/
│   │   │       ├── dashboard.component.ts (100 líneas)
│   │   │       ├── dashboard.component.html (50 líneas)
│   │   │       └── dashboard.component.scss (20 líneas)
│   │   ├── app.component.ts (30 líneas)
│   │   ├── app.config.ts (80 líneas)
│   │   └── app.routes.ts (50 líneas)
│   ├── main.ts (20 líneas)
│   ├── styles.scss (50 líneas)
│   └── index.html (25 líneas)
├── project.json
├── tsconfig.app.json
├── tsconfig.json
└── vite.config.mts

Total estimado: ~755 líneas de código (55 líneas adicionales para footer)

Component Hierarchy

AppComponent (root)
└── Router Outlet
    ├── LoginComponent (/login)
    └── AppShellComponent (authenticated routes)
        ├── HeaderComponent (top)
        ├── Router Outlet (main content)
        │   ├── DashboardComponent (/dashboard)
        │   └── UserManagementModule routes (/users/*)
        │       ├── UserListComponent (/users/list)
        │       ├── UserFormComponent (/users/create, /users/:id/edit)
        │       ├── UserDetailComponent (/users/:id)
        │       └── UserDeleteConfirmComponent (modal)
        ├── FooterComponent (bottom)
        └── (inline nav or simple sidebar)

Dependencias Core

// app.config.ts dependencies
import { provideRouter, withComponentInputBinding } from '@angular/router';
import { provideHttpClient, withInterceptors } from '@angular/common/http';
import { provideStore } from '@ngxs/store';
import { authInterceptor, contextInterceptor } from '@libs-core/security';
import { mockHttpInterceptor, provideMockApi } from '@libs-core/mock-api';
import { provideLogger, LogLevel, ConsoleAppender } from '@libs-core/log-system';
import { provideEventBus } from '@libs-core/event-system';
import { provideModuleIntegrator } from '@libs-core/module-integrator';
import { UserState, UserMockApi } from '@libs-core/user-management';

Mock Data Strategy

Authentication Mock

// Mock API endpoint: POST /api/auth/login
const mockUsers = [
  {
    email: '[email protected]',
    password: 'admin123',
    profile: {
      id: '1',
      tenantId: 'default-tenant',
      email: '[email protected]',
      displayName: 'Admin User',
      role: { id: 'admin', name: 'Administrator', level: 100 }
    },
    token: 'mock-jwt-token-admin'
  },
  {
    email: '[email protected]',
    password: 'editor123',
    profile: {
      id: '2',
      tenantId: 'default-tenant',
      email: '[email protected]',
      displayName: 'Editor User',
      role: { id: 'editor', name: 'Editor', level: 50 }
    },
    token: 'mock-jwt-token-editor'
  }
];

Dashboard Stats Mock

// Mock API endpoint: GET /api/dashboard/stats
const mockStats = {
  totalUsers: 12,
  activeUsers: 8,
  newToday: 2,
  lastLogin: '2025-10-02T10:30:00Z'
};

User List Mock

Reutilizar mock data existente de @gograb-space/user-management/UserMockApi.

Implementation Plan (Day by Day)

📅 Day 1 - Foundation (6-8 hours)

Objetivo: App básica funcionando y sirviendo

Tareas:

  1. ✅ Crear app con Nx: npx nx g @nx/angular:app gograb-admin
  2. ✅ Configurar port 5100 en project.json
  3. ✅ Setup app.component.ts básico
  4. ✅ Crear app.config.ts con todos los providers
  5. ✅ Crear app.routes.ts (estructura básica)
  6. ✅ Verificar build: npx nx build gograb-admin
  7. ✅ Verificar serve: npx nx serve gograb-admin
  8. ✅ Configurar tsconfig paths si es necesario

Entregable: App vacía sirviendo en http://localhost:5100

Validación:

npx nx serve gograb-admin
# Browser: http://localhost:5100
# Debe mostrar página básica sin errores de consola

📅 Day 2 - Authentication Flow (6-8 hours)

Objetivo: Login funcional con mock authentication

Tareas:

  1. ✅ Crear LoginComponent con reactive form
  2. ✅ Implementar login form HTML y validaciones
  3. ✅ Crear mock auth endpoint en mock-api config
  4. ✅ Implementar login service con JWT mock
  5. ✅ Crear AppShellComponent (layout básico)
  6. ✅ Implementar authGuard en routes
  7. ✅ Configurar redirección login → dashboard
  8. ✅ Test manual: login con admin y editor

Entregable: Login → Dashboard flow funcionando

Validación:

# Test 1: Sin autenticación → redirect a /login
# Test 2: Login con [email protected] → acceso a dashboard
# Test 3: Login con [email protected] → acceso a dashboard
# Test 4: Token guardado en localStorage
# Test 5: Logout funcional (si implementado)

📅 Day 3 - Dashboard & Module Integration (6-8 hours)

Objetivo: Dashboard funcional + module system configurado

Tareas:

  1. ✅ Crear DashboardComponent con stat cards
  2. ✅ Mock dashboard stats API endpoint
  3. ✅ HeaderComponent con user profile display
  4. ✅ FooterComponent simple (copyright, versión, links básicos)
  5. ✅ Configurar provideModuleIntegrator en app.config
  6. ✅ Verificar logs de module lifecycle en consola
  7. ✅ Preparar integración con user-management routes
  8. ✅ Test navegación entre dashboard y login
  9. ✅ Verificar que logging system funciona

Entregable: Dashboard con stats + module system inicializado

Validación:

# Test 1: Dashboard muestra stats mock
# Test 2: Console logs muestran:
#   - "IntegratorService initialized"
#   - "Module discovery started"
#   - "Module 'user-management' discovered"
# Test 3: Header muestra nombre de usuario logueado

📅 Day 4 - User Management Integration & CRUD Completo (6-8 hours)

Objetivo: Integración completa con user-management + CRUD funcionando end-to-end

Tareas:

  1. ✅ Integrar user-management routes dinámicamente
  2. ✅ Verificar dynamic route loading (todas las rutas CRUD):
    • /users/list - Lista con búsqueda y filtros
    • /users/create - Formulario de creación
    • /users/:id - Vista de detalles
    • /users/:id/edit - Formulario de edición
    • Eliminación con confirmación
  3. ✅ Configurar permisos mock en usuarios (admin con todos, editor limitado)
  4. ✅ Crear sidebar o nav menu con:
    • Link a Dashboard
    • Link a Users
    • Botón "Create User" (si tiene permiso users:create)
  5. ✅ Test flujo completo CRUD:
    • Ver lista → Ver detalle → Editar → Guardar
    • Ver lista → Crear nuevo → Guardar
    • Ver lista → Eliminar → Confirmar
  6. ✅ Implementar role-based UI visibility
  7. ✅ Verificar logs de module lifecycle completo
  8. ✅ Test con ambos usuarios (admin CRUD completo, editor solo lectura)

Entregable: User management CRUD completo funcionando con permisos granulares

NOTA IMPORTANTE: Como user-management ya tiene TODO implementado, este día se enfoca en:

Validación CRUD Completo:

# Test 1: Ver Lista de Usuarios
- Admin login → navegar a /users/list
- Ver lista completa con botones "Create", "Edit", "Delete"
- Búsqueda y filtros funcionan

# Test 2: Crear Usuario
- Click en "Create User" → /users/create
- Llenar formulario (email, nombre, rol)
- Guardar → redirect a /users/list
- Nuevo usuario aparece en lista

# Test 3: Ver Detalles
- Click en un usuario → /users/:id
- Ver información completa
- Botón "Edit" visible para admin

# Test 4: Editar Usuario
- Desde detalle, click "Edit" → /users/:id/edit
- Modificar datos
- Guardar → ver cambios reflejados

# Test 5: Eliminar Usuario
- Desde lista, click "Delete"
- Modal de confirmación aparece
- Confirmar → usuario eliminado de lista

# Test 6: Permisos Editor
- Editor login → /users/list
- Ver lista pero SIN botones "Create", "Delete"
- Puede ver detalles pero NO editar
- Permisos validados en routing y UI

# Test 7: Console Logs Lifecycle
# Console logs muestran:
#   - "Module 'user-management' configured"
#   - "Module 'user-management' initialized"
#   - "Module 'user-management' started"
#   - "Routes registered for user-management"
# Test 4: Navegación fluida sin reloads
# Test 5: Sidebar muestra opciones según role

📅 Day 5 - Polish & Validation (6-8 hours)

Objetivo: Refinamiento y validación completa del POC

Tareas:

  1. ✅ Aplicar styling básico con ui-framework (opcional)
  2. ✅ Implementar loading states en login y dashboard
  3. ✅ Agregar error handling básico
  4. ✅ Crear 404 page
  5. ✅ Mejorar mensajes de log para demo
  6. ✅ Testing manual completo de todos los flujos
  7. ✅ Documentar resultados del POC
  8. ✅ Preparar demo para stakeholders

Entregable: POC completo y documentado

Validación Manual Completa:

# Flujo 1: Happy Path Admin
1. Abrir http://localhost:5100
2. Login como [email protected] / admin123
3. Ver dashboard con stats
4. Navegar a Users
5. Ver lista de usuarios
6. Verificar console logs del ciclo de vida
7. Logout (si implementado)

# Flujo 2: Happy Path Editor
1. Login como [email protected] / editor123
2. Ver dashboard con stats
3. Navegar a Users (si tiene permiso)
4. Ver lista de usuarios (sin botones de edición)
5. Verificar visibilidad limitada en sidebar

# Flujo 3: Error Cases
1. Login con credenciales incorrectas → mensaje de error
2. Acceso directo a /users sin login → redirect a /login
3. Navegar a /unknown-route → 404 page
4. Token expirado (simular) → re-login

# Flujo 4: Module System Demo
1. Abrir DevTools Console
2. Login y navegar a dashboard
3. Observar logs:
   ✓ Module discovery
   ✓ Module configuration
   ✓ Module initialization
   ✓ Module start
   ✓ Route registration
4. Navegar a /users → observar lazy loading
5. Verificar que rutas vienen de user-management module

Success Criteria

Funcionales

Técnicos

Demostración

Risks & Mitigation

HIGH RISK

Risk: provideModuleIntegrator API no está completamente implementado

Risk: Estimación de tiempo muy optimista

MEDIUM RISK

Risk: Integración con user-management más compleja de lo esperado

Risk: Mock API configuration issues

LOW RISK

Risk: Styling consume demasiado tiempo

Post-MVP Evolution

Immediate Next Steps (Semana 2)

  1. Tests E2E

    • Setup Playwright
    • Tests de login flow
    • Tests de navegación básica
  2. CRUD de Usuarios

    • User create form
    • User edit form
    • User delete confirmation
  3. Permisos Granulares

    • Permission entities
    • permissionGuard con permisos específicos
    • UI directivas con permisos

Future Enhancements

Comandos Útiles

# Crear la aplicación
npx nx g @nx/angular:app gograb-admin --directory=apps/gograb-admin

# Servir la aplicación
npx nx serve gograb-admin

# Build production
npx nx build gograb-admin

# Lint
npx nx lint gograb-admin

# Test (cuando se agreguen)
npx nx test gograb-admin

# Ver graph de dependencias
npx nx graph

# Ver project details
npx nx show project gograb-admin

Conclusión

Este plan de implementación MVP de 1 semana está diseñado para:

✅ Demostrar arquitectura - Module system y dynamic routing funcionando ✅ Ser realista - Scope ajustado a timeline sin comprometer objetivos ✅ Ser flexible - Priorización clara permite ajustes durante ejecución ✅ Ser completo - POC técnico funcional que valida conceptos clave

El MVP resultante será una base sólida para iteraciones futuras, con la arquitectura correcta desde el inicio y un path claro de evolución hacia el sistema completo especificado en gograb-admin-requirements.md.


Próximo paso: Comenzar Day 1 - Foundation

Comando inicial:

npx nx g @nx/angular:app gograb-admin --directory=apps/gograb-admin --routing --style=scss --standalone --prefix=app