academia/docs/ENTREGABLES.md

9.8 KiB

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

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

# 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/:

  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