# Entregables - Prueba Técnica Senior .NET/Angular **Proyecto:** Sistema de Registro de Estudiantes **Empresa:** Inter Rapidísimo **Cargo:** Desarrollador Master .NET/Angular --- ## Resumen Ejecutivo Sistema web completo para gestión de inscripciones de estudiantes con las siguientes características: - **Backend:** .NET 10, GraphQL (HotChocolate), Clean Architecture - **Frontend:** Angular 21, Standalone Components, Signals - **Base de Datos:** SQL Server con EF Core - **Seguridad:** OWASP compliant, rate limiting, query complexity - **Testing:** 145 tests automatizados - **Despliegue:** Docker + Kubernetes (k3s) --- ## Estructura del Proyecto ``` / ├── src/ │ ├── backend/ # .NET 10 API GraphQL │ │ ├── Domain/ # Entidades, Value Objects, Ports │ │ ├── Application/ # Commands, Queries, DTOs │ │ ├── Adapters/ # GraphQL API, Persistence │ │ └── Host/ # Entry point, DI │ └── frontend/ # Angular 21 SPA ├── tests/ # Tests automatizados ├── docs/ # Documentación └── deploy/ # Docker + k3s ``` --- ## Funcionalidades Implementadas ### Requisitos Funcionales | # | Requisito | Estado | |---|-----------|--------| | 1 | CRUD completo de estudiantes | ✅ | | 2 | Inscripción en materias (max 3) | ✅ | | 3 | Visualización de compañeros de clase | ✅ | | 4 | Restricción de profesor único | ✅ | | 5 | 10 materias, 5 profesores | ✅ | | 6 | 3 créditos por materia | ✅ | | 7 | Validación de inscripciones | ✅ | | 8 | UI responsiva | ✅ | | 9 | Manejo de errores | ✅ | ### Reglas de Negocio - ✅ Máximo 3 materias por estudiante (9 créditos) - ✅ No repetir profesor en inscripciones - ✅ Validación en Domain Layer (pura, testeable) - ✅ Mensajes de error descriptivos --- ## Arquitectura ### Clean Architecture ``` Host → Adapters → Application → Domain ``` - **Domain:** Entidades puras, sin dependencias - **Application:** Casos de uso con CQRS - **Adapters:** GraphQL API + EF Core - **Host:** Composición y DI ### Patrones Implementados | Patrón | Uso | |--------|-----| | CQRS | Separación Commands/Queries | | Repository | Abstracción de persistencia | | Ports & Adapters | Inversión de dependencias | | DataLoader | Evitar N+1 en GraphQL | | Specification | Consultas reutilizables | --- ## Testing ### Resumen de Tests | Tipo | Cantidad | Cobertura | |------|----------|-----------| | Domain Tests | 30 | Entidades, Value Objects, Services | | Application Tests | 66 | Commands, Queries, Validators | | Integration Tests | 5 | GraphQL API completa | | Angular Unit Tests | 24 | Services, Pipes | | E2E Tests (Playwright) | 20 | Flujos de usuario | | **Total** | **145** | | ### Ejecutar Tests ```bash # Backend dotnet test # Frontend cd src/frontend ng test --watch=false # E2E npx playwright test ``` --- ## Seguridad (OWASP) | Control | Implementación | |---------|----------------| | Input Validation | FluentValidation + Regex | | SQL Injection | EF Core parametrizado | | XSS Prevention | Sanitización en validators | | Security Headers | CSP, HSTS, X-Frame-Options | | Rate Limiting | 100 req/min (fixed window) | | Query Complexity | Depth 5, Cost 100 | | Logging | Serilog (sin datos sensibles) | --- ## Documentación | Documento | Ubicación | |-----------|-----------| | README principal | `/README.md` | | Arquitectura Backend | `/docs/entregables/02-diseno/arquitectura/` | | Modelo de Dominio | `/docs/entregables/02-diseno/modelo-dominio/` | | Diseño BD | `/docs/entregables/02-diseno/base-datos/` | | Esquema GraphQL | `/docs/entregables/02-diseno/esquema-graphql/` | | ADRs | `/docs/architecture/decisions/` | | OWASP Checklist | `/docs/OWASP_CHECKLIST.md` | | Manual Despliegue | `/docs/DEPLOYMENT.md` | --- ## Despliegue ### Docker ```bash cd deploy/docker docker-compose up -d --build ``` ### Kubernetes (k3s) ```bash cd deploy/k3s ./deploy.sh all ``` ### URLs | Servicio | URL | |----------|-----| | Frontend | http://localhost:80 | | API GraphQL | http://localhost:5000/graphql | | Playground | http://localhost:5000/graphql | --- ## Competencias Demostradas ### Arquitectura y Diseño - ✅ Clean Architecture con separación de capas - ✅ Principios SOLID aplicados - ✅ Domain-Driven Design (DDD lite) - ✅ CQRS para separación de concerns ### Backend (.NET) - ✅ .NET 10 con C# 13 - ✅ GraphQL con HotChocolate - ✅ EF Core con Fluent API - ✅ FluentValidation - ✅ DataLoaders para N+1 ### Frontend (Angular) - ✅ Angular 21 con Standalone Components - ✅ Signals para estado reactivo - ✅ Apollo Client para GraphQL - ✅ Angular Material UI - ✅ Lazy Loading ### DevOps - ✅ Docker multi-stage builds - ✅ Kubernetes manifests - ✅ Health checks - ✅ Horizontal Pod Autoscaler ### Testing - ✅ Unit tests con alta cobertura - ✅ Integration tests - ✅ E2E tests con Playwright - ✅ Mocking de dependencias ### Seguridad - ✅ OWASP Top 10 compliance - ✅ Input validation - ✅ Rate limiting - ✅ Security headers --- ## Cómo Ejecutar ### Desarrollo Local ```bash # Backend cd src/backend/Host dotnet run # Frontend cd src/frontend npm install ng serve ``` ### Con Docker ```bash cd deploy/docker docker-compose up -d ``` ### Tests ```bash # Todos los tests backend dotnet test # Tests frontend cd src/frontend && ng test # E2E cd src/frontend && npx playwright test ``` --- ## Decisiones Técnicas Ver ADRs completos en `/docs/architecture/decisions/`: 1. **ADR-001:** Clean Architecture - Testabilidad y mantenibilidad 2. **ADR-002:** GraphQL vs REST - Flexibilidad en queries 3. **ADR-003:** Signals vs RxJS - Simplicidad en estado local 4. **ADR-004:** Validación 3 capas - Defensa en profundidad --- *Desarrollado como prueba técnica para Inter Rapidísimo*