README
Ecosistema completo para organización y gestión de contenido con interfaces espaciales
Product Catalog Module
Descripción General
El módulo Product Catalog es una unidad de funcionalidad reutilizable que implementa el contrato BrowserModuleContract. Proporciona una interfaz completa para la gestión de productos con funcionalidades CRUD, búsqueda, filtrado y operaciones masivas, diseñado para ser cargado dinámicamente en cualquier aplicación del monorepo GoGrab Space.
Información del Módulo
- ID:
product-catalog - Versión:
1.0.0 - Nombre: Product Catalog
- Librería:
@gograb-space/product-catalog - Tipo: Módulo Frontend (Browser-only)
- Ubicación:
libs/modules/product-catalog/
Arquitectura del Módulo
Estructura del Proyecto
libs/modules/product-catalog/
├── src/
│ ├── lib/
│ │ ├── components/ # Componentes UI del módulo
│ │ │ ├── product-list.component.ts
│ │ │ ├── product-grid.component.ts
│ │ │ ├── product-detail.component.ts
│ │ │ ├── product-form.component.ts
│ │ │ └── filters/
│ │ ├── services/ # Servicios específicos del módulo
│ │ │ ├── product-api.service.ts
│ │ │ ├── product-state.service.ts
│ │ │ └── product-filter.service.ts
│ │ ├── models/ # Interfaces y tipos
│ │ │ ├── product.types.ts
│ │ │ └── filter.types.ts
│ │ ├── mock/ # Datos mock para desarrollo
│ │ │ └── product-mock-data.ts
│ │ └── product-catalog.module.ts # Clase principal del módulo
│ ├── index.ts # Barrel exports
│ └── test-setup.ts
├── project.json
├── tsconfig.json
├── tsconfig.lib.json
└── README.md
Implementación del Contrato
El módulo implementa BrowserModuleContract con:
- ID: 'product-catalog'
- Permisos: ['products:read', 'products:write', 'products:create', 'products:delete', 'products:bulk']
- Métodos del ciclo de vida: configure, initialize, start, stop, destroy
- Logger tenant-aware: Automático por token injection
- Eventos: Publica eventos de estado del módulo y operaciones CRUD
Funcionalidades Principales
1. Visualización de Productos
- Vista Lista: Tabla con información detallada y acciones rápidas
- Vista Grid: Cards visuales con imágenes y datos clave
- Vista Detalle: Información completa con galería de imágenes
- Cambio dinámico: Switching entre vistas sin pérdida de estado
2. Gestión Completa CRUD
Crear Producto
- Formulario multi-step con validación en tiempo real
- Upload de imágenes con preview y validación de formato
- Categorización y etiquetado dinámico
- Guardado de borradores automático
- Validación client-side y server-side
Editar Producto
- Edición inline para cambios rápidos
- Formulario completo para edición detallada
- Historial de cambios y comparación
- Actualización parcial optimizada
- Control de concurrencia con bloqueo optimista
Eliminar Producto
- Confirmación con modal informativo
- Eliminación individual y masiva (batch)
- Soft delete con opción de restaurar
- Validación de dependencias antes de eliminar
Duplicar Producto
- Clonación rápida preservando datos base
- Ajuste automático de SKU único
- Conservación de categorías y tags
- Personalización post-clonación
3. Búsqueda y Filtrado Avanzado
Filtrado Server-Side
- Construcción dinámica de query parameters
- Filtros por categoría, precio, disponibilidad, fecha
- Búsqueda full-text en múltiples campos
- Combinación de criterios múltiples
- Persistencia en URL para compartir
Filtrado Client-Side
- Refinamiento de resultados ya cargados
- Filtros rápidos sin nueva petición HTTP
- Filtros complementarios al server-side
- Cache inteligente de resultados
4. Operaciones Masivas
- Selección múltiple con checkboxes
- Barra de acciones contextual
- Actualización batch de productos
- Eliminación múltiple con confirmación
- Exportación de selección en diferentes formatos
- Cambio de categoría masivo
- Progress indicator para operaciones largas
5. Ordenamiento y Paginación
- Ordenamiento multi-columna (nombre, precio, fecha, SKU)
- Paginación server-side optimizada
- Control de items por página (10, 25, 50, 100)
- Navegación rápida entre páginas
- Información completa de totales y rango actual
Modelos y Tipos
Mejores Prácticas Aplicadas
- ✅ Usar tipos base de
@libs-core/shared-models - ✅ Context-aware: sin tenantId redundante
- ✅ Extender BaseEntity para entidades
- ✅ Usar ApiResponse para responses estándar
- ✅ Tipos específicos del módulo solo cuando sea necesario
Tipos Principales
- Product: Entidad principal extendiendo BaseEntity
- ProductStatus: 'active' | 'inactive' | 'draft' | 'discontinued'
- ProductCategory: Categorización jerárquica
- ProductFilter: Criterios de filtrado
- BulkOperation: Operaciones masivas
- ProductFormData: Datos del formulario
- ImageUpload: Gestión de imágenes
Servicios
ProductApiService
- Gestión completa de peticiones HTTP (GET, POST, PUT, DELETE)
- Construcción dinámica de query parameters
- Manejo robusto de respuestas y errores
- Interceptores para auth, retry y caching
- Context-aware: sin tenantId explícito
- Logger automáticamente tenant-aware
ProductStateService
- Estado global del módulo con Signals
- Gestión de productos actuales, loading states, errores
- Producto seleccionado y modo de edición activo
- Sincronización bidireccional con la API
- Cache inteligente con invalidación
- Optimistic updates para mejor UX
ProductFormService
- Construcción dinámica de formularios reactivos
- Validaciones personalizadas por campo
- Gestión automática de borradores
- Transformación de datos para la API
- Validaciones asíncronas (unicidad de SKU)
ProductFilterService
- Gestión completa de filtros activos
- Construcción optimizada de query parameters
- Persistencia de filtros en URL
- Reseteo selectivo de filtros
- Combinación de filtros server y client-side
Componentes
Componentes de Visualización
- ProductListComponent: Tabla completa con funcionalidades CRUD
- ProductGridComponent: Vista de cards responsiva
- ProductDetailComponent: Vista detallada con galería
- ProductCardComponent: Card individual reutilizable
Componentes de Gestión
- ProductFormComponent: Formulario crear/editar multi-step
- ProductDeleteConfirmComponent: Modal de confirmación informativo
- ProductBulkActionsComponent: Barra de acciones masivas
- ProductDuplicateComponent: Interfaz de clonación
Componentes de Filtrado
- ProductFiltersComponent: Panel completo de filtros
- ProductSearchComponent: Barra de búsqueda con autocompletado
- ProductSortComponent: Selector avanzado de ordenamiento
- ActiveFiltersComponent: Chips de filtros activos con remove
Componentes Auxiliares
- ImageGalleryComponent: Galería con zoom y navegación
- ImageUploaderComponent: Upload drag & drop con validación
- CategorySelectorComponent: Árbol jerárquico de categorías
- PriceInputComponent: Input especializado para precios
Flujos de Usuario Principales
Flujo de Creación
- Acceso desde botón "Nuevo Producto"
- Formulario multi-step progresivo
- Validación en tiempo real por campo
- Upload opcional de imágenes
- Selección de categorías y tags
- Preview final antes de envío
- Confirmación y redirección
Flujo de Edición
- Selección desde lista o detalle
- Carga de datos actuales
- Edición con validación
- Preview de cambios
- Actualización optimista
- Confirmación del servidor
Flujo de Operaciones Masivas
- Selección múltiple progresiva
- Aparición de barra de acciones
- Selección de operación
- Confirmación con resumen
- Procesamiento con progress
- Reporte de resultados detallado
Estados del Módulo
- Loading: Cargando productos iniciales
- Ready: Productos cargados y operativo
- Creating: Creando nuevo producto
- Editing: Editando producto existente
- Deleting: Eliminando productos
- BulkProcessing: Ejecutando operación masiva
- Error: Error en operación con detalles
Integración con el Sistema
Eventos Emitidos
- MODULE_STARTED, MODULE_STOPPED, MODULE_DESTROYED
- PRODUCT_CREATED, PRODUCT_UPDATED, PRODUCT_DELETED
- PRODUCT_SELECTED, PRODUCT_DESELECTED
- PRODUCTS_FILTERED, PRODUCTS_SORTED
- BULK_OPERATION_STARTED, BULK_OPERATION_COMPLETED
- PRODUCT_IMAGE_UPLOADED
Permisos Requeridos
products:read- Ver catálogo de productosproducts:write- Editar productos existentesproducts:create- Crear nuevos productosproducts:delete- Eliminar productosproducts:bulk- Ejecutar operaciones masivas
Carga Dinámica
El módulo se carga usando el IntegratorService:
- Import dinámico:
() => import('@gograb-space/product-catalog') - Gestión automática del ciclo de vida
- Lazy loading optimizado por Nx
- Tree-shaking para imports selectivos
Mock API Integration
Endpoints Principales
GET /api/products- Lista con filtros y paginaciónGET /api/products/:id- Detalle completoPOST /api/products- Crear nuevo productoPUT /api/products/:id- Actualizar existenteDELETE /api/products/:id- Eliminar productoPOST /api/products/bulk- Operaciones masivasGET /api/products/categories- Árbol de categoríasPOST /api/products/:id/images- Upload de imágenes
Características del Mock
- Datos realistas con +100 productos
- Simulación de latencia variable
- Manejo de errores HTTP apropiados
- Paginación server-side funcional
- Filtros y ordenamiento completos
- Validaciones business logic
- Estructura usando shared-models types
Optimizaciones Implementadas
Performance
- Lazy loading de imágenes con intersection observer
- Virtual scrolling para listas grandes (+1000 items)
- Debounce inteligente en búsquedas (300ms)
- Cache estratégico de requests frecuentes
- Paginación server-side optimizada
- Change Detection OnPush en todos los componentes
User Experience
- Loading skeletons durante cargas
- Optimistic updates para operaciones rápidas
- Inline editing para cambios menores
- Undo/Redo para acciones críticas
- Autosave progresivo de borradores
- Keyboard shortcuts para power users
Configuración del Módulo
El módulo acepta configuración para:
- Items por página por defecto (25)
- Vista inicial preferida (lista/grid)
- Campos visibles en tabla
- Validaciones personalizadas adicionales
- Timeouts de caché (5 minutos)
- Habilitación selectiva de features
Dependencias
Angular Core
- @angular/common, @angular/forms, @angular/router
Librerías GoGrab
- @libs-core/module-base (contrato base)
- @libs-core/ui-framework (componentes UI)
- @libs-core/shared-models (tipos base)
- @gograb-space/utilities (helpers y validaciones)
- @libs-core/log-system (logging tenant-aware)
- @libs-core/event-system (comunicación entre módulos)
Librerías Externas
- RxJS (gestión de estado reactivo)
- Formly (formularios dinámicos)
Comandos de Desarrollo
# Generar el módulo
npx nx g @nx/angular:lib product-catalog --directory=libs/modules --standalone --changeDetection=OnPush
# Ejecutar tests
npx nx test product-catalog
# Build del módulo
npx nx build product-catalog
# Lint del módulo
npx nx lint product-catalog
# Ver dependencias
npx nx graph --focus=product-catalog
Best Practices Aplicadas
✅ Arquitectura Modular: Implementa BrowserModuleContract completamente
✅ Context-Aware: Sin tenantId redundante - manejo por contexto
✅ Shared Models: Usa tipos base de @libs-core/shared-models
✅ Standalone Components: Solo componentes standalone con OnPush
✅ Signals: Preferencia por Signals sobre Observables para estado
✅ Logging Tenant-Aware: Logger automáticamente incluye contexto del tenant
✅ Event-Driven: Publica eventos del ciclo de vida y operaciones
✅ Mock Data Complete: Cobertura completa de endpoints con datos realistas
✅ Testing Ready: Estructura preparada para tests unitarios e integración
✅ Lazy Loading: Diseñado para carga dinámica optimizada
✅ Tree-shaking: Exports organizados en barrel exports
✅ Performance Optimized: Virtual scrolling, lazy loading, caching
✅ UX Focused: Optimistic updates, loading states, error handling
Notas Importantes
⚠️ Módulo Frontend Completo:
- Consume APIs REST existentes
- No maneja lógica de servidor/database
- Validaciones client-side complementarias
- Autenticación via tokens del backend
- Todos los datos vienen de endpoints API
Planificación Requerida:
- Incluir tarea específica para crear mock data completa (+100 productos)
- Tests que verifiquen todos los contratos API
- Simulación de errores y edge cases
- Performance testing con datasets grandes
- Accessibility testing para todos los componentes