academia/docs/ENTREGABLES.md

5.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

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

# 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

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