Tasks
Ecosistema completo para organización y gestión de contenido con interfaces espaciales
Data Binding - Plan de Implementación
📋 Información del Documento
Proyecto: GoGrab Space - Data Binding Library Versión: 1.0.0 (MVP) Fecha Inicio: 2025-01-04 Última Actualización: 2025-11-05 Estado: ✅ MVP Completado - Fases 1-3 implementadas, tests creados
🎯 Objetivo General
Implementar la librería @libs-core/data-binding con todas las funcionalidades MVP siguiendo el diseño especificado en design.md y cumpliendo los requerimientos de requirements.md.
📊 Resumen Ejecutivo
| Métrica | Valor |
|---|---|
| Total de Tareas | 25 |
| Fases | 5 |
| Duración Estimada | 2-3 días de desarrollo |
| Prioridad | Alta |
| Complejidad | Media-Alta |
🏗️ Fases del Proyecto
Fase 1: Setup y Modelos (Fundación)
Duración: ~4 horas Prioridad: Crítica
Fase 2: Resolvers (Core Logic)
Duración: ~6 horas Prioridad: Crítica
Fase 3: Servicio Principal (Orchestration)
Duración: ~4 horas Prioridad: Crítica
Fase 4: UI de Configuración (User Experience)
Duración: ~6 horas Prioridad: Alta
Fase 5: Testing y Documentación (Quality Assurance)
Duración: ~4 horas Prioridad: Alta
📝 Tareas Detalladas
Fase 1: Setup y Modelos
T-001: Crear Librería Base
Prioridad: Crítica Estimación: 30 min Asignado a: TBD
Descripción:
Crear la librería @libs-core/data-binding usando Nx generators.
Pasos:
- Ejecutar:
npx nx g @nx/angular:lib data-binding --directory=libs/core - Configurar
project.jsoncon build targets - Actualizar
tsconfig.base.jsoncon path mapping - Crear estructura de carpetas base
Criterios de Aceptación:
- ✅ Librería creada en
libs/core/data-binding - ✅ Path mapping
@libs-core/data-bindingfuncional - ✅ Build exitoso con
npx nx build data-binding - ✅ Estructura de carpetas según diseño
Dependencias: Ninguna
T-002: Definir BindingSourceType
Prioridad: Crítica Estimación: 15 min Asignado a: TBD
Descripción: Crear types para los diferentes tipos de fuentes de datos.
Archivo: libs/core/data-binding/src/lib/models/binding-source.types.ts
Código:
/**
* Tipos de fuentes de datos soportadas
*/
export type BindingSourceType =
| 'manual' // MVP
| 'repository' // MVP
| 'config' // MVP
| 'event' // Futuro
| 'action' // Futuro
| 'transform'; // Futuro
Criterios de Aceptación:
- ✅ Archivo creado con JSDoc completo
- ✅ Tipos exportados en
index.ts - ✅ Build sin errores
Dependencias: T-001
T-003: Definir Source Configs
Prioridad: Crítica Estimación: 45 min Asignado a: TBD
Descripción: Crear interfaces para configuración de cada tipo de fuente.
Archivos:
models/source-configs/manual-source.config.tsmodels/source-configs/repository-source.config.tsmodels/source-configs/config-source.config.tsmodels/source-configs/index.ts(barrel export)
Criterios de Aceptación:
- ✅ Cada config tiene discriminador
type - ✅ Union type
BindingSourceConfigfuncional - ✅ Type narrowing funciona correctamente
- ✅ JSDoc completo con ejemplos
Dependencias: T-002
T-004: Definir DataBinding Interface
Prioridad: Crítica Estimación: 30 min Asignado a: TBD
Descripción:
Crear interfaz principal DataBinding que extiende ParameterMetadata.
Archivo: models/data-binding.interface.ts
Código:
import { ParameterMetadata } from '@libs-core/shared-models';
import { BindingSourceType, BindingSourceConfig } from './binding-source.types';
export interface DataBinding extends ParameterMetadata {
source: BindingSourceType;
sourceConfig: BindingSourceConfig;
}
Criterios de Aceptación:
- ✅ Extiende
ParameterMetadatacorrectamente - ✅ Type safety completo
- ✅ Importación de shared-models funcional
- ✅ JSDoc completo
Dependencias: T-003
T-005: Actualizar Exports
Prioridad: Alta Estimación: 15 min Asignado a: TBD
Descripción:
Actualizar index.ts con exports de modelos.
Archivo: src/index.ts
Criterios de Aceptación:
- ✅ Todos los modelos exportados
- ✅ Barrel exports organizados
- ✅ No circular dependencies
Dependencias: T-004
Fase 2: Resolvers
T-006: Crear Resolver Interface
Prioridad: Crítica Estimación: 20 min Asignado a: TBD
Descripción: Definir contrato para todos los resolvers.
Archivo: services/resolvers/resolver.interface.ts
Código:
import { Observable } from 'rxjs';
import { DataBinding } from '../../models';
export interface Resolver {
resolve<T = unknown>(binding: DataBinding): Observable<T>;
}
Criterios de Aceptación:
- ✅ Interface definida
- ✅ Generic type parameter
- ✅ Retorna Observable
Dependencias: T-005
T-007: Crear Base Resolver
Prioridad: Crítica Estimación: 45 min Asignado a: TBD
Descripción: Clase abstracta base con helpers comunes.
Archivo: services/resolvers/base.resolver.ts
Funcionalidades:
- Logger injection
- extractValue() helper
- validateType() helper
- Error handling base
Criterios de Aceptación:
- ✅ Clase abstracta funcional
- ✅ Helpers testeados
- ✅ Logger integrado
- ✅ JSDoc completo
Dependencias: T-006
T-008: Implementar Manual Resolver
Prioridad: Alta Estimación: 30 min Asignado a: TBD
Descripción: Resolver para valores estáticos manuales.
Archivo: services/resolvers/manual.resolver.ts
Código:
@Injectable({ providedIn: 'root' })
export class ManualResolver extends BaseResolver {
resolve<T>(binding: DataBinding): Observable<T> {
const config = binding.sourceConfig as ManualSourceConfig;
this.logger.debug('Resolving manual binding', { name: binding.name });
return of(config.value as T);
}
}
Criterios de Aceptación:
- ✅ Retorna valor inmediatamente
- ✅ Type casting correcto
- ✅ Logging implementado
- ✅ Tests unitarios ≥ 95%
Dependencias: T-007
T-009: Implementar Repository Resolver
Prioridad: Crítica Estimación: 2 horas Asignado a: TBD
Descripción:
Resolver para integración con @libs-core/data-access.
Archivo: services/resolvers/repository.resolver.ts
Funcionalidades:
- Obtener repositorio de RepositoryRegistry
- Invocación dinámica de métodos
- Soporte para parámetros de método
- Extracción de valores con resultPath
- Manejo de errores detallado
Criterios de Aceptación:
- ✅ Integración con RepositoryRegistry funcional
- ✅ Dynamic method invocation correcto
- ✅ resultPath extraction funcional
- ✅ Error handling robusto
- ✅ Logging detallado
- ✅ Tests unitarios ≥ 95%
Dependencias: T-007
T-010: Implementar Config Resolver
Prioridad: Alta Estimación: 1 hora Asignado a: TBD
Descripción: Resolver para configuración del sistema.
Archivo: services/resolvers/config.resolver.ts
Funcionalidades:
- Lectura de configuración global
- Soporte para configuración por módulo
- Cache de valores (opcional)
Criterios de Aceptación:
- ✅ Lectura de config funcional
- ✅ Soporte moduleId opcional
- ✅ Error handling
- ✅ Tests unitarios ≥ 90%
Dependencias: T-007
T-011: Crear Resolver Index
Prioridad: Media Estimación: 10 min Asignado a: TBD
Descripción: Barrel export para resolvers.
Archivo: services/resolvers/index.ts
Criterios de Aceptación:
- ✅ Todos los resolvers exportados
- ✅ Interface exportada
Dependencias: T-010
Fase 3: Servicio Principal
T-012: Implementar DataBindingService
Prioridad: Crítica Estimación: 2 horas Asignado a: TBD
Descripción: Servicio principal de coordinación.
Archivo: services/data-binding.service.ts
Funcionalidades:
resolve<T>(binding): Observable<T>resolveMany(bindings): Observable<Map<string, unknown>>validate(binding): ValidationResultregisterResolver(type, resolver): void- Resolver selection logic
- Error handling con fallback a defaultValue
- Logging completo
Criterios de Aceptación:
- ✅ API pública completa
- ✅ Resolver selection automático
- ✅ Fallback a defaultValue funcional
- ✅ Parallel resolution con forkJoin
- ✅ Type safety completo
- ✅ Tests unitarios ≥ 95%
- ✅ Tests de integración completos
Dependencias: T-011
T-013: Implementar Binding Registry
Prioridad: Media Estimación: 1 hora Asignado a: TBD
Descripción: Servicio para registrar y recuperar bindings configurados.
Archivo: services/binding-registry.service.ts
Funcionalidades:
- Almacenamiento de bindings por widget/action
- Recuperación de bindings
- Persistencia (opcional en MVP)
Criterios de Aceptación:
- ✅ CRUD básico de bindings
- ✅ Type safety
- ✅ Tests unitarios ≥ 90%
Dependencias: T-012
T-014: Crear Utilities
Prioridad: Media Estimación: 45 min Asignado a: TBD
Descripción: Funciones utilitarias para validación y conversión.
Archivos:
utils/binding-validators.tsutils/type-converters.ts
Funcionalidades:
- Validación de binding structure
- Conversión de tipos
- Sanitización de valores
Criterios de Aceptación:
- ✅ Funciones puras
- ✅ Tests completos
- ✅ JSDoc detallado
Dependencias: T-012
Fase 4: UI de Configuración
T-015: Crear Componente Base
Prioridad: Alta Estimación: 1 hora Asignado a: TBD
Descripción: Scaffolding del componente BindingConfiguratorComponent.
Archivos:
ui/binding-configurator/binding-configurator.component.tsui/binding-configurator/binding-configurator.component.htmlui/binding-configurator/binding-configurator.component.scss
Criterios de Aceptación:
- ✅ Standalone component
- ✅ OnPush change detection
- ✅ Signals para estado
- ✅ Inputs y Outputs definidos
Dependencias: T-014
T-016: Implementar Selector de Fuente
Prioridad: Alta Estimación: 45 min Asignado a: TBD
Descripción: Dropdown para seleccionar tipo de fuente de datos.
Funcionalidades:
- Select con opciones: Manual, Repository, Config
- Actualización dinámica de formulario
- Signal reactivo para fuente seleccionada
Criterios de Aceptación:
- ✅ Select funcional
- ✅ Cambio de fuente resetea configuración
- ✅ UI responsive
Dependencias: T-015
T-017: Implementar Form Manual
Prioridad: Media Estimación: 30 min Asignado a: TBD
Descripción: Formulario para configurar binding manual.
Funcionalidades:
- Input dinámico según parameterType
- Validación de tipo
- Signal para valor
Criterios de Aceptación:
- ✅ Input correcto según tipo
- ✅ Validación funcional
- ✅ Accesible (a11y)
Dependencias: T-016
T-018: Implementar Form Repository
Prioridad: Alta Estimación: 1.5 horas Asignado a: TBD
Descripción: Formulario para configurar binding de repositorio.
Funcionalidades:
- Select de repositorio (lista de RepositoryRegistry)
- Input de método
- Input de parámetros (JSON)
- Input de resultPath
- Validación de configuración
Criterios de Aceptación:
- ✅ Select de repositorios dinámico
- ✅ Validación de método
- ✅ Validación de parámetros JSON
- ✅ resultPath opcional funcional
Dependencias: T-016
T-019: Implementar Form Config
Prioridad: Media Estimación: 30 min Asignado a: TBD
Descripción: Formulario para configurar binding de configuración.
Funcionalidades:
- Input de configKey
- Input de moduleId (opcional)
- Validación de clave
Criterios de Aceptación:
- ✅ Inputs funcionales
- ✅ Validación de formato
- ✅ moduleId opcional
Dependencias: T-016
T-020: Implementar Función de Prueba
Prioridad: Alta Estimación: 1 hora Asignado a: TBD
Descripción: Botón y lógica para probar binding configurado.
Funcionalidades:
- Botón "Probar"
- Llamada a DataBindingService.resolve()
- Display de resultado
- Manejo de errores visuales
Criterios de Aceptación:
- ✅ Prueba funcional
- ✅ Resultado mostrado
- ✅ Errores mostrados claramente
- ✅ Loading state
Dependencias: T-019
T-021: Implementar Acciones de Guardar/Cancelar
Prioridad: Alta Estimación: 30 min Asignado a: TBD
Descripción: Lógica para guardar o cancelar configuración.
Funcionalidades:
- Botón Guardar → buildBinding() → emit
- Botón Cancelar → emit cancelled
- Validación antes de guardar
Criterios de Aceptación:
- ✅ Guardar crea DataBinding válido
- ✅ Cancelar limpia estado
- ✅ Validación funcional
Dependencias: T-020
T-022: Styling del Configurador
Prioridad: Media Estimación: 1 hora Asignado a: TBD
Descripción: Diseño visual del componente.
Funcionalidades:
- Integración con @libs-core/ui-framework
- Responsive design
- Accesibilidad (ARIA, keyboard nav)
- Estados visuales (loading, error, success)
Criterios de Aceptación:
- ✅ Diseño consistente con ui-framework
- ✅ Responsive (mobile, tablet, desktop)
- ✅ Accesible (WCAG 2.1 AA)
- ✅ Estados visuales claros
Dependencias: T-021
Fase 5: Testing y Documentación
T-023: Tests Unitarios
Prioridad: Crítica Estimación: 2 horas Asignado a: TBD
Descripción: Tests unitarios completos para toda la librería.
Alcance:
- Todos los resolvers
- DataBindingService
- BindingRegistryService
- Utilities
- BindingConfiguratorComponent
Criterios de Aceptación:
- ✅ Cobertura ≥ 90%
- ✅ Todos los casos edge cubiertos
- ✅ Mocking apropiado
- ✅ Tests rápidos (< 5s total)
Dependencias: T-022
T-024: Tests de Integración
Prioridad: Alta Estimación: 1.5 horas Asignado a: TBD
Descripción: Tests de integración para flows completos.
Escenarios:
- Widget initialization con binding resolution
- UI configurator → save → widget update
- Parallel resolution de múltiples bindings
- Error handling end-to-end
Criterios de Aceptación:
- ✅ Flows principales cubiertos
- ✅ Setup real de servicios
- ✅ No mocking de dependencias core
Dependencias: T-023
T-025: Documentación y Ejemplos
Prioridad: Alta Estimación: 1 hora Asignado a: TBD
Descripción: Completar documentación con ejemplos funcionales.
Entregables:
- Actualizar README.md con ejemplos reales
- Crear componente de ejemplo (UserListWidget)
- JSDoc completo en toda la API pública
- Comentarios en código complejo
Criterios de Aceptación:
- ✅ README completo y actualizado
- ✅ Ejemplo funcional documentado
- ✅ JSDoc coverage 100%
- ✅ No código sin comentarios
Dependencias: T-024
📊 Tracking de Progreso
Dashboard de Estado
| Fase | Tareas | Completadas | Pendientes | Bloqueadas | % Progreso |
|---|---|---|---|---|---|
| 1. Setup y Modelos | 5 | 0 | 5 | 0 | 0% |
| 2. Resolvers | 6 | 0 | 6 | 0 | 0% |
| 3. Servicio Principal | 3 | 0 | 3 | 0 | 0% |
| 4. UI de Configuración | 8 | 0 | 8 | 0 | 0% |
| 5. Testing y Docs | 3 | 0 | 3 | 0 | 0% |
| TOTAL | 25 | 0 | 25 | 0 | 0% |
🎯 Definición de Done
Una tarea se considera completada cuando:
- ✅ Código implementado según especificación
- ✅ Build exitoso sin errores ni warnings
- ✅ Tests escritos y pasando (≥ 90% coverage)
- ✅ JSDoc completo en APIs públicas
- ✅ Code review aprobado (si aplica)
- ✅ No
anytypes en código de producción - ✅ Logging implementado donde aplique
- ✅ Integrado en rama principal
🚀 Plan de Entrega
Iteración 1: Core MVP (Crítico)
Duración: 1.5 días Incluye: Fases 1, 2, 3
Entregable:
- Modelos completos
- Resolvers funcionales
- DataBindingService operacional
- Tests unitarios básicos
Criterio de Éxito:
- Resolución de bindings funcional end-to-end
- Widget puede usar binding de repositorio
Iteración 2: UI y Polish (Importante)
Duración: 1 día Incluye: Fases 4, 5
Entregable:
- BindingConfiguratorComponent completo
- Tests de integración
- Documentación completa
- Ejemplo funcional
Criterio de Éxito:
- Usuario final puede configurar binding visualmente
- Tests ≥ 90% coverage
- Build production-ready
📈 Métricas de Calidad
Métricas Técnicas
| Métrica | Target | Crítico |
|---|---|---|
| Test Coverage | ≥ 90% | ≥ 80% |
| Build Time | < 30s | < 60s |
| Bundle Size | < 50KB | < 100KB |
| Type Errors | 0 | 0 |
| Linting Errors | 0 | 0 |
| Any Types | 0 | 0 |
Métricas de Performance
| Métrica | Target | Crítico |
|---|---|---|
| Manual Resolution | < 10ms | < 50ms |
| Repository Resolution | < 100ms | < 200ms |
| Config Resolution | < 50ms | < 100ms |
| Parallel (10x) | < 200ms | < 500ms |
| UI Load Time | < 50ms | < 100ms |
🔄 Proceso de Desarrollo
Workflow por Tarea
Planning
- Revisar task description
- Revisar dependencies
- Estimar tiempo real
- Identificar riesgos
Development
- Crear feature branch
- Implementar código
- Escribir tests
- Ejecutar linter
Quality Check
- Ejecutar tests localmente
- Verificar coverage
- Build production
- Review self
Integration
- Commit con mensaje descriptivo
- Push to remote
- Create PR (si aplica)
- Merge a main
🐛 Bug Tracking
Template de Bug
**Bug ID**: BUG-XXX
**Severidad**: Critical/High/Medium/Low
**Fase**: X
**Tarea Relacionada**: T-XXX
**Descripción**:
[Descripción del bug]
**Pasos para Reproducir**:
1. ...
2. ...
**Comportamiento Esperado**:
[...]
**Comportamiento Actual**:
[...]
**Fix Propuesto**:
[...]
📝 Notas de Implementación
Orden Recomendado
Se recomienda seguir el orden de tareas estrictamente, ya que:
- Cada tarea tiene dependencias específicas
- El orden minimiza refactoring
- Permite testing incremental
- Facilita integración continua
Puntos de Validación
Checkpoint 1 (Después de T-005):
- ✅ Modelos compilan sin errores
- ✅ Type safety verificado
- ✅ Exports funcionales
Checkpoint 2 (Después de T-011):
- ✅ Resolvers funcionan de forma aislada
- ✅ Tests unitarios pasan
- ✅ Integration tests básicos pasan
Checkpoint 3 (Después de T-014):
- ✅ DataBindingService funcional end-to-end
- ✅ Widget puede resolver binding
- ✅ Performance dentro de targets
Checkpoint 4 (Después de T-022):
- ✅ UI configurator funcional
- ✅ Usuario puede configurar binding
- ✅ Build production exitoso
Checkpoint 5 (Después de T-025):
- ✅ Todas las métricas de calidad cumplidas
- ✅ Documentación completa
- ✅ Ejemplo funcional
- ✅ Ready for production
🎉 Criterios de Éxito del Proyecto
El proyecto se considera exitoso cuando:
- ✅ Las 25 tareas están completadas
- ✅ Todas las métricas de calidad se cumplen
- ✅ Build production exitoso
- ✅ Al menos 1 widget funcional usa data-binding
- ✅ UI configurator probado con usuarios reales
- ✅ Documentación completa y aprobada
- ✅ Performance dentro de targets
- ✅ Zero bugs críticos abiertos
- ✅ Code review aprobado
- ✅ Preparado para integración con Singularity (futuro)
Estado Actual: ⏸️ Pendiente de Inicio
Próximo Paso: Aprobar documentación (README, requirements, design, tasks) y comenzar T-001.