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 |
✅ |
| 10 |
Autenticación JWT |
✅ |
| 11 |
Flujo de activación de estudiantes |
✅ |
| 12 |
Control de acceso por roles (Admin/Student) |
✅ |
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
Sistema de Autenticación
- ✅ JWT con HMAC-SHA256
- ✅ Flujo de Activación: Admin crea estudiante → Código de activación → Estudiante activa cuenta
- ✅ Roles: Admin (gestión completa) / Student (dashboard personal)
- ✅ Recuperación: Código de recuperación generado en activación
- ✅ Seguridad: PBKDF2-SHA256 para hashing de contraseñas
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 |
Diagramas de Arquitectura
Todos los diagramas están disponibles en /docs/architecture/diagrams/ en formatos PNG y SVG.
| # |
Diagrama |
Archivo |
Descripción |
| 1 |
Casos de Uso |
01-use-cases |
Actores (Estudiante, Admin), funcionalidades del sistema, reglas de negocio |
| 2 |
Modelo de Dominio |
02-domain-model |
Entidades (User, Student, Professor, Subject, Enrollment), Value Objects, Domain Services |
| 3 |
Secuencia Inscripción |
03-sequence-enrollment |
Flujo completo de inscripción con JWT, validaciones y persistencia |
| 4 |
Componentes |
04-components |
Arquitectura Clean Architecture: Frontend Angular 21, Backend .NET 10, GraphQL |
| 5 |
Entidad-Relación |
05-entity-relationship |
Modelo de base de datos: tablas, relaciones, restricciones |
| 6 |
Estados |
06-state-enrollment |
Estados de cuenta (activación) e inscripciones (0-9 créditos) |
| 7 |
Despliegue |
07-deployment |
Infraestructura K3s: Nginx, ASP.NET Core, SQL Server, Traefik Ingress |
| 8 |
C4 Contexto |
08-c4-context |
Vista de alto nivel: actores, sistema, sistemas externos |
Requisitos de la Prueba Técnica Cubiertos
| Requisito |
Diagrama(s) |
| CRUD de estudiantes |
01, 04 |
| Programa de créditos |
02, 06 |
| 10 materias, 3 créditos c/u |
02, 05 |
| Máximo 3 materias (9 créditos) |
01, 02, 03, 06 |
| 5 profesores, 2 materias c/u |
02, 05 |
| No repetir profesor |
01, 02, 03, 05 |
| Ver compañeros de clase |
01, 04 |
Testing
Resumen de Tests
| Tipo |
Cantidad |
Cobertura |
| Domain Tests |
30 |
Entidades, Value Objects, Services |
| Application Tests |
98 |
Commands, Queries, Validators, Auth |
| Integration Tests |
5 |
GraphQL API completa |
| Angular Unit Tests |
24 |
Services, Pipes |
| E2E Tests (Playwright) |
97 |
Flujos de usuario completos |
| Total |
254 |
|
Tests E2E por Categoría
| Categoría |
Tests |
Descripción |
| Autenticación |
15 |
Login, registro, reset password, logout |
| Control de Acceso |
16 |
Roles Admin/Student, guards, protección rutas |
| Reglas de Negocio |
16 |
Max 3 materias, mismo profesor, inscribir/cancelar |
| Flujo Activación |
18 |
Creación estudiante, código, activación cuenta |
| CRUD Estudiantes |
6 |
Crear, listar, validaciones |
| Inscripciones |
7 |
Navegar, inscribir, cancelar |
| Compañeros |
7 |
Listar, navegar |
| Otros |
12 |
Estados UI, edge cases |
Tests Backend de Auth (Nuevos)
| Handler |
Tests |
Casos Cubiertos |
| LoginCommand |
6 |
Credenciales válidas/inválidas, normalización, lastLogin |
| RegisterCommand |
8 |
Registro exitoso, usuario duplicado, validaciones, recovery code |
| ResetPasswordCommand |
8 |
Reset válido/inválido, validaciones, hashing |
| ActivateAccountCommand |
10 |
Activación, expiración, username duplicado, JWT |
Ejecutar Tests
# Backend - Todos
dotnet test tests/Application.Tests
dotnet test tests/Domain.Tests
dotnet test tests/Integration.Tests
# Backend - Solo Auth
dotnet test tests/Application.Tests --filter "FullyQualifiedName~Auth"
# Frontend Unit Tests
cd src/frontend && ng test --watch=false
# E2E - Todos
cd src/frontend && npx playwright test
# E2E - Por categoría
npx playwright test auth.spec.ts
npx playwright test role-access.spec.ts
npx playwright test enrollment-restrictions.spec.ts
npx playwright test activation.spec.ts
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/ |
| Diagramas UML |
/docs/architecture/diagrams/ |
| OWASP Checklist |
/docs/OWASP_CHECKLIST.md |
| Manual Despliegue |
/docs/DEPLOYMENT.md |
Diagramas Incluidos
docs/architecture/diagrams/
├── 01-use-cases.png # Casos de uso
├── 02-domain-model.png # Modelo de dominio
├── 03-sequence-enrollment.png # Secuencia inscripción
├── 04-components.png # Arquitectura componentes
├── 05-entity-relationship.png # Diagrama E-R
├── 06-state-enrollment.png # Estados inscripción
├── 07-deployment.png # Despliegue K3s
└── 08-c4-context.png # Contexto C4
Despliegue
Docker
cd deploy/docker
docker-compose up -d --build
Kubernetes (k3s)
cd deploy/k3s
./deploy.sh all
URLs
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
# Backend
cd src/backend/Host
dotnet run
# Frontend
cd src/frontend
npm install
ng serve
Con Docker
cd deploy/docker
docker-compose up -d
Tests
# 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/:
- ADR-001: Clean Architecture - Testabilidad y mantenibilidad
- ADR-002: GraphQL vs REST - Flexibilidad en queries
- ADR-003: Signals vs RxJS - Simplicidad en estado local
- ADR-004: Validación 3 capas - Defensa en profundidad
Desarrollado como prueba técnica para Inter Rapidísimo