# Plan de Actividades - Prueba Técnica Senior .NET/Angular

## Información del Proyecto
- **Cargo:** Desarrollador Master .NET/Angular
- **Empresa:** Inter Rapidísimo
- **Proyecto:** Sistema de Registro de Estudiantes
- **Stack:** .NET 10 + GraphQL (HotChocolate) + Angular 21 + SQL Server

---

## Procesos de Fábrica de Software

| Código | Proceso | Descripción |
|--------|---------|-------------|
| **AN** | Análisis | Levantamiento de requisitos, historias de usuario |
| **DI** | Diseño | Arquitectura, modelos, prototipos UI/UX |
| **DE** | Desarrollo | Codificación, implementación |
| **QA** | Quality Assurance | Testing, revisión de código |
| **DV** | DevOps | CI/CD, containerización, despliegue |
| **DO** | Documentación | Técnica, usuario, API |
| **SE** | Seguridad | Validaciones, autenticación, OWASP |

---

## Tabla de Actividades

### Fase 1: Análisis y Planificación (AN)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 1.1 | Análisis de requisitos funcionales | Identificar y documentar los 9 requisitos del enunciado, criterios de aceptación por cada uno | Analista | AN |
| 1.2 | Identificación de reglas de negocio | Documentar restricciones: máx 3 materias, 3 créditos/materia, 5 profesores con 2 materias c/u, restricción de profesor único | Analista | AN |
| 1.3 | Definición de historias de usuario | Crear historias con formato "Como [rol] quiero [acción] para [beneficio]" con criterios de aceptación | Product Owner | AN |
| 1.4 | Análisis de requisitos no funcionales | Definir: rendimiento (<200ms respuesta), seguridad (OWASP Top 10), usabilidad (responsive), mantenibilidad | Arquitecto | AN |
| 1.5 | Identificación de riesgos técnicos | Mapear riesgos: complejidad de validaciones, integración frontend-backend, manejo de concurrencia | Líder Técnico | AN |

### Fase 2: Diseño de Arquitectura (DI)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 2.1 | Diseño de arquitectura backend | Definir Clean Architecture: Domain, Application, Infrastructure, GraphQL. Diagrama de capas y dependencias | Arquitecto Backend | DI |
| 2.2 | Diseño del modelo de dominio | Crear diagrama de entidades: Student, Subject, Professor, Enrollment. Definir agregados y value objects | Arquitecto Backend | DI |
| 2.3 | Diseño de base de datos | Modelo E-R normalizado (3FN), índices, constraints, scripts DDL con integridad referencial | DBA/Arquitecto | DI |
| 2.4 | Diseño de esquema GraphQL | Definir Types, Queries, Mutations, Inputs, Payloads. Diseñar resolvers y DataLoaders para N+1 | Arquitecto Backend | DI |
| 2.5 | Diseño de arquitectura frontend | Definir estructura Angular: standalone components, signals, lazy loading, Apollo Client para GraphQL | Arquitecto Frontend | DI |
| 2.6 | Diseño de componentes UI | Wireframes de pantallas: listado estudiantes, formulario inscripción, selección materias, vista compañeros | UI/UX Designer | DI |
| 2.7 | Definición de contratos GraphQL | Schema GraphQL completo, DTOs de request/response, interfaces de servicios, contratos entre capas | Arquitecto | DI |
| 2.8 | Diseño de estrategia de manejo de errores | Definir excepciones de dominio, error handling en GraphQL (Union types para errores), respuestas estandarizadas | Arquitecto | DI |

### Fase 3: Configuración del Entorno (DV)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 3.1 | Inicialización del repositorio | Crear estructura de carpetas, .gitignore, README, DEV-GUIDE.md con convenciones del proyecto | DevOps | DV |
| 3.2 | Configuración solución .NET | Crear solución con 4 proyectos (Domain, Application, Infrastructure, GraphQL), referencias entre proyectos | Backend Dev | DV |
| 3.3 | Configuración proyecto Angular | ng new con standalone, configurar ESLint, Prettier, paths aliases, Apollo Angular para GraphQL | Frontend Dev | DV |
| 3.4 | Configuración de base de datos | Docker compose para SQL Server, scripts de inicialización, connection strings por ambiente | DevOps/DBA | DV |
| 3.5 | Configuración de variables de entorno | User secrets para desarrollo, appsettings por ambiente, environment.ts en Angular | DevOps | DV |
| 3.6 | Configuración de herramientas de calidad | EditorConfig, .NET analyzers, ESLint rules, Husky para pre-commit hooks | DevOps | DV |

### Fase 4: Desarrollo Backend (DE)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 4.1 | Implementar capa Domain | Entidades (Student, Subject, Professor, Enrollment), Value Objects, interfaces de repositorios, excepciones de dominio | Backend Dev | DE |
| 4.2 | Implementar reglas de negocio en Domain | Validaciones en entidades: EnrollmentPolicy (max 3 materias), ProfessorConstraint (no repetir profesor) | Backend Dev | DE |
| 4.3 | Implementar capa Application - DTOs | Records inmutables para requests/responses, mappers con Mapster o extension methods | Backend Dev | DE |
| 4.4 | Implementar capa Application - Servicios | StudentService, EnrollmentService con casos de uso: Create, Update, Delete, GetAll, GetById, GetClassmates | Backend Dev | DE |
| 4.5 | Implementar validadores FluentValidation | Validators para CreateStudentInput, EnrollStudentInput con reglas de negocio | Backend Dev | DE |
| 4.6 | Implementar capa Infrastructure - DbContext | Configurar EF Core 10, Fluent API para mapeos, configuraciones de entidades, seeding de datos iniciales | Backend Dev | DE |
| 4.7 | Implementar capa Infrastructure - Repositorios | Repositorios genérico y específicos, Unit of Work, queries optimizadas con Include/ThenInclude | Backend Dev | DE |
| 4.8 | Implementar GraphQL Types | StudentType, SubjectType, ProfessorType, EnrollmentType con HotChocolate | Backend Dev | DE |
| 4.9 | Implementar GraphQL Queries | Resolvers para: students, student(id), subjects, availableSubjects(studentId), classmates(studentId), professors | Backend Dev | DE |
| 4.10 | Implementar GraphQL Mutations | createStudent, updateStudent, deleteStudent, enrollStudent, unenrollStudent con Payloads de respuesta | Backend Dev | DE |
| 4.11 | Implementar DataLoaders | DataLoaders para evitar N+1: StudentByIdDataLoader, SubjectByIdDataLoader, ProfessorByIdDataLoader | Backend Dev | DE |
| 4.12 | Implementar middleware de errores | ExceptionHandlingMiddleware, mapeo de excepciones de dominio a errores GraphQL | Backend Dev | DE |
| 4.13 | Configurar Dependency Injection | Registrar servicios por capa en Program.cs, configurar HotChocolate con servicios | Backend Dev | DE |
| 4.14 | Implementar migraciones EF Core | Crear migración inicial, script de seed para profesores y materias predefinidas | Backend Dev | DE |

### Fase 5: Desarrollo Frontend (DE)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 5.1 | Configurar Apollo Angular | Instalar apollo-angular, configurar ApolloModule con endpoint GraphQL, cache policies | Frontend Dev | DE |
| 5.2 | Implementar GraphQL Queries en Angular | Archivos .graphql o queries en TypeScript para students, subjects, classmates | Frontend Dev | DE |
| 5.3 | Implementar GraphQL Mutations en Angular | Mutations para crear/editar estudiante, inscribir/desinscribir materias | Frontend Dev | DE |
| 5.4 | Implementar capa Core - Servicios | StudentService, SubjectService, EnrollmentService usando Apollo Client | Frontend Dev | DE |
| 5.5 | Implementar capa Core - Interceptores | HttpErrorInterceptor para manejo global de errores, LoadingInterceptor para indicador de carga | Frontend Dev | DE |
| 5.6 | Implementar capa Shared - Componentes UI | ButtonComponent, InputComponent, CardComponent, TableComponent, ModalComponent, AlertComponent | Frontend Dev | DE |
| 5.7 | Implementar capa Shared - Directivas y Pipes | HighlightDirective, TooltipDirective, TruncatePipe, CreditsPipe | Frontend Dev | DE |
| 5.8 | Implementar feature Students - Listado | Tabla con estudiantes usando Apollo watchQuery, búsqueda, paginación, acciones CRUD | Frontend Dev | DE |
| 5.9 | Implementar feature Students - Formulario | Reactive form para crear/editar estudiante con validaciones, mutation de Apollo | Frontend Dev | DE |
| 5.10 | Implementar feature Enrollment - Selección materias | Componente con query availableSubjects, validación visual de restricción de profesor, contador de créditos | Frontend Dev | DE |
| 5.11 | Implementar feature Enrollment - Vista compañeros | Query classmates con listado de nombres por materia inscrita | Frontend Dev | DE |
| 5.12 | Implementar gestión de estado | Signals para estado local, Apollo cache para estado del servidor, optimistic updates | Frontend Dev | DE |
| 5.13 | Implementar manejo de errores UI | Toast notifications, estados de error en formularios, manejo de errores GraphQL | Frontend Dev | DE |
| 5.14 | Implementar responsive design | CSS con mobile-first, breakpoints para tablet/desktop, Angular Material responsive | Frontend Dev | DE |
| 5.15 | Implementar loading states | Skeletons, spinners, estados de carga con Apollo loading state | Frontend Dev | DE |

### Fase 6: Integración GraphQL (DE)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 6.1 | Configurar CORS | Permitir origen del frontend en desarrollo y producción, headers para GraphQL | Backend Dev | DE |
| 6.2 | Configurar Banana Cake Pop | Playground integrado de HotChocolate para testing de queries/mutations | Backend Dev | DE |
| 6.3 | Implementar health checks | Endpoint /health para verificar conectividad a BD y servicios | Backend Dev | DE |
| 6.4 | Configurar Apollo DevTools | Habilitar Apollo DevTools en desarrollo para debugging de queries y cache | Frontend Dev | DE |
| 6.5 | Implementar caché de Apollo | Configurar cache policies: cache-first para datos estáticos, network-only para datos dinámicos | Frontend Dev | DE |
| 6.6 | Generar tipos TypeScript | Usar GraphQL Code Generator para generar tipos desde el schema GraphQL | Frontend Dev | DE |

### Fase 7: Seguridad (SE)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 7.1 | Implementar validación de entrada | Sanitización de inputs, validación en frontend y backend, prevención de inyección | Security Dev | SE |
| 7.2 | Configurar headers de seguridad | Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, HSTS | Security Dev | SE |
| 7.3 | Implementar rate limiting | Limitar requests por IP para prevenir DoS, configurar en middleware GraphQL | Security Dev | SE |
| 7.4 | Configurar query complexity | Limitar profundidad y complejidad de queries GraphQL para prevenir ataques | Security Dev | SE |
| 7.5 | Validar OWASP Top 10 | Revisar: Injection, Broken Auth, XSS, Insecure Design, Security Misconfiguration | Security Dev | SE |
| 7.6 | Configurar logging seguro | No loguear datos sensibles, structured logging con Serilog, niveles apropiados | Security Dev | SE |

### Fase 8: Testing (QA)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 8.1 | Unit tests - Domain | Tests para reglas de negocio: validación max 3 materias, restricción profesor, cálculo créditos | QA/Backend Dev | QA |
| 8.2 | Unit tests - Application | Tests para servicios, mappers, validators usando mocks de repositorios | QA/Backend Dev | QA |
| 8.3 | Integration tests - GraphQL | Tests de queries y mutations con WebApplicationFactory, base de datos in-memory | QA/Backend Dev | QA |
| 8.4 | Unit tests - Angular Components | Tests con Jest/Jasmine para componentes, servicios con Apollo testing utilities | QA/Frontend Dev | QA |
| 8.5 | E2E tests | Tests con Playwright para flujos críticos: registro estudiante, inscripción materias | QA | QA |
| 8.6 | Tests de reglas de negocio | Casos de prueba específicos para restricciones: intentar 4ta materia, mismo profesor | QA | QA |
| 8.7 | Code review | Revisión de código aplicando checklist: SOLID, Clean Code, convenciones, seguridad | Líder Técnico | QA |
| 8.8 | Análisis de código estático | Ejecutar analyzers .NET, ESLint, corregir code smells, vulnerabilidades, duplicación | QA | QA |

### Fase 9: Optimización y Rendimiento (DE)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 9.1 | Optimizar queries EF Core | Revisar N+1 (usar DataLoaders), AsNoTracking para lecturas, proyecciones con Select, índices en BD | Backend Dev | DE |
| 9.2 | Implementar caché backend | Response caching para queries estáticas, memory cache para datos frecuentes | Backend Dev | DE |
| 9.3 | Optimizar bundle Angular | Lazy loading de rutas, tree shaking, análisis de bundle size | Frontend Dev | DE |
| 9.4 | Optimizar rendimiento UI | OnPush change detection, trackBy en ngFor, debounce en búsquedas | Frontend Dev | DE |
| 9.5 | Comprimir assets | Minificación CSS/JS, compresión gzip/brotli | DevOps | DE |

### Fase 10: Documentación (DO)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 10.1 | Documentar arquitectura | Diagrama C4 (Context, Container, Component), decisiones de arquitectura (ADR) | Arquitecto | DO |
| 10.2 | Documentar esquema GraphQL | Schema completo con descripciones, ejemplos de queries/mutations en Banana Cake Pop | Backend Dev | DO |
| 10.3 | Documentar modelo de datos | Diagrama E-R, diccionario de datos, scripts de creación comentados | DBA | DO |
| 10.4 | README del proyecto | Instrucciones de instalación, configuración, ejecución, estructura del proyecto | Líder Técnico | DO |
| 10.5 | Documentar decisiones técnicas | Por qué Clean Architecture, por qué GraphQL vs REST, por qué Signals vs RxJS | Arquitecto | DO |
| 10.6 | Manual de despliegue | Pasos para deploy, variables de entorno requeridas, checklist pre-producción | DevOps | DO |

### Fase 11: Entrega y Despliegue (DV)

| # | Actividad | Detalle | Rol | Proceso |
|---|-----------|---------|-----|---------|
| 11.1 | Configurar Dockerfile GraphQL | Multi-stage build, imagen optimizada, health check, non-root user | DevOps | DV |
| 11.2 | Configurar Dockerfile frontend | Build con Node, serve con Nginx, configuración de proxy para GraphQL | DevOps | DV |
| 11.3 | Crear docker-compose | Orquestación de GraphQL API, frontend, SQL Server, configuración de red y volúmenes | DevOps | DV |
| 11.4 | Pruebas de despliegue | Verificar funcionamiento end-to-end en ambiente containerizado | DevOps/QA | DV |
| 11.5 | Preparar entregables | Empaquetar código fuente, scripts BD, documentación, instrucciones de ejecución | Líder Técnico | DV |
| 11.6 | Validación final | Checklist de requisitos cumplidos, demo funcional, revisión de calidad | Líder Técnico | DV |

---

## Resumen por Proceso

| Proceso | Actividades | Peso |
|---------|-------------|------|
| Análisis (AN) | 5 | 5% |
| Diseño (DI) | 8 | 15% |
| DevOps (DV) | 12 | 10% |
| Desarrollo Backend (DE) | 14 | 30% |
| Desarrollo Frontend (DE) | 15 | 25% |
| Seguridad (SE) | 6 | 5% |
| Testing (QA) | 8 | 5% |
| Documentación (DO) | 6 | 5% |
| **TOTAL** | **74** | **100%** |

---

## Criterios de Calidad Senior

### Competencias Demostradas

| Área | Evidencia |
|------|-----------|
| **Arquitectura** | Clean Architecture, separación de concerns, principios SOLID |
| **GraphQL** | Schema bien diseñado, DataLoaders para N+1, error handling |
| **Código Limpio** | Naming conventions, SRP, métodos pequeños, sin duplicación |
| **Testing** | Cobertura de reglas críticas, tests unitarios y de integración |
| **Seguridad** | OWASP compliance, validación de inputs, query complexity limits |
| **Rendimiento** | Queries optimizadas, caching estratégico, Apollo cache |
| **Mantenibilidad** | Código autodocumentado, arquitectura desacoplada, DTOs |
| **DevOps** | Containerización, configuración por ambiente |
| **Documentación** | Schema GraphQL documentado, README completo |

### Diferenciadores Senior vs Junior

| Aspecto | Junior | Senior (Este proyecto) |
|---------|--------|------------------------|
| Arquitectura | Monolítico, acoplado | Clean Architecture, capas bien definidas |
| API | REST básico | GraphQL con HotChocolate, DataLoaders |
| Validaciones | Solo en frontend | Frontend + Backend + Domain |
| Errores | Try-catch genéricos | Excepciones de dominio, Union types para errores |
| Testing | Manual o ninguno | Unit + Integration + E2E automatizados |
| Estado Frontend | Variables globales | Signals + Apollo Cache |
| BD | EF directo en controller | Repository + Unit of Work + Specifications |
| Seguridad | Ninguna | OWASP, headers, rate limiting, query complexity |

---

## Orden de Ejecución Recomendado

```
Bloque 1: Fundamentos
├── AN (1.1-1.5) → Requisitos claros
├── DI (2.1-2.8) → Arquitectura definida
└── DV (3.1-3.6) → Ambiente configurado

Bloque 2: Backend Core
├── DE (4.1-4.7) → Domain + Application + Infrastructure
└── DE (4.8-4.14) → GraphQL API funcional

Bloque 3: Frontend Core
├── DE (5.1-5.7) → Core + Shared + Apollo config
└── DE (5.8-5.15) → Features completas

Bloque 4: Integración
└── DE (6.1-6.6) → Frontend ↔ Backend conectados

Bloque 5: Calidad
├── SE (7.1-7.6) → Seguridad implementada
├── QA (8.1-8.8) → Tests ejecutados
└── DE (9.1-9.5) → Optimizaciones aplicadas

Bloque 6: Entrega
├── DO (10.1-10.6) → Documentación completa
└── DV (11.1-11.6) → Despliegue validado
```

> **Nota:** Ejecutar los bloques secuencialmente. Dentro de cada bloque, las actividades pueden paralelizarse según disponibilidad de recursos.
