Skip to content

Repositorio para la participación del Nivel Integraciones de Competencia CodExpress

Notifications You must be signed in to change notification settings

ComputerSocietyUN/CodExpress-NivelIntegraciones

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

CodExpress — Nivel Sistemas e Integraciones

Tiempo: 3 horas · Meta: completar 7 u 8 mini-retos y, si te alcanza, una app integrada (código 4900) que reutilice tus propios módulos. Lenguajes: Python, JavaScript (Node ≥18) o Java (≥11).

Flujo de trabajo (fork & PR)

  1. Haz fork y clónalo.
  2. Usa un <ALIAS> sin espacios ni acentos (tu usuario de GitHub o nombre-apellido en minúsculas).
  3. Cada mini-reto va en un archivo con nombre exacto: <CODIGO_RETO>_<ALIAS>_v<N>.<ext> (ej.: 4004_carlos-perez_v1.py o 4004_carlos-perez_v1.js).
  4. Si haces la app, crea 4900_<ALIAS>_app/ con README.md (cómo ejecutar), y si quieres src/ y requirements.txt/package.json/pom.xml.
  5. Abre un Pull Request a main titulado: <ALIAS> — Entrega Nivel Integraciones.

Códigos

  • Mini-retos: 4001–4008 (elige 7 u 8).
  • App integrada: 4900 (Service Stitcher).

Nombre de archivo obligatorio: <CODIGO_RETO>_<ALIAS>_v<N>.<ext>


Mini-retos (entrega 7 u 8)

Usa solo librerías estándar del lenguaje. Al final de cada archivo incluye, en comentarios, 3 pruebas (entrada → salida esperada). La salida se compara literalmente. Donde se pida módulo/primitive específico, debes usarlo.

CódigoNombreRequisitos de integraciónEntrada / SalidaArchivoDocs útiles
4001CRUD usuarios (almacenamiento local)Python: sqlite3. Node: fs JSON con escritura atómica (tmp → rename). Java: JSON plano con Files + Paths (atómico). Campos: id,nombre,email,rol. Comandos: ADD/GET/DEL/LIST. Email duplicado → ERROR:DUP. Formato LIST ordenado por id.Líneas de comandos por stdin. Salida: registros como id,nombre <email> rol o errores exactos.4001_<ALIAS>_v1.(py|js|java)Py: sqlite3 · Node: fs · Java: java.nio.file
4002Cliente HTTP (monedas) con backoffHaz GET a un mock local (tú mismo puedes lanzar python -m http.server o usar archivos). Python: urllib.request, Node: fetch nativo, Java: HttpClient. Si 429/503: exponential backoff + jitter (semilla --seed para reproducir). Imprime conversión amount from→to = total.Entrada: amount from to y ruta del JSON mock (archivo o http://localhost). Salida exacta en una línea.4002_<ALIAS>_v1.(py|js|java)Py: urllib.request · Java: java.net.http
4003Webhook verifier (HMAC-SHA256)Verifica petición simulada: lee body (JSON) y header X-Sign (hex). Calcula HMAC con una SECRET (por env SECRET o parámetro) usando hmac/crypto/Mac. Si coincide: imprime OK, si no: INVALID. Rechaza timestamp fuera de ±5 min si el body trae ts.Entrada: archivo con JSON y header simulado. Salida: OK o INVALID.4003_<ALIAS>_v1.(py|js|java)Py: hmac/hashlib · Node: crypto · Java: javax.crypto.Mac
4004JWT-like HS256 (parse + verify)Sin librerías externas: parsea header.payload.signature en Base64URL, verifica HS256 con HMAC-SHA256 y SECRET. Valida exp ≥ now y aud igual al esperado (parámetro). Imprime sub=... y role=... si es válido; si no, INVALID.Entrada: token y SECRET (y aud esperado). Salida: sub=... role=... o INVALID.4004_<ALIAS>_v1.(py|js|java)Py: base64/json/hmac · Node: Buffer/crypto · Java: Base64/Mac
4005ETL CSV→JSON con esquemaLee CSV (stdin o archivo), valida campos requeridos y tipos (implementa mini-schema tú mismo: required, tipo, rango). Si una fila no cumple, imprímela en ERR con motivo. Salida principal: JSON array válido en stdout (solo filas válidas).Entrada: CSV con encabezados y un esquema simple (p.ej., archivo .schema.json). Salida: JSON en una línea y, en stderr o prefijo ERR:, los errores.4005_<ALIAS>_v1.(py|js|java)Py: csv/json · Node: fs/stream · Java: java.io
4006Rate limiter (token bucket)Implementa token bucket (capacidad C, tasa R tps). Procesa una secuencia de timestamps y decide ALLOW/DROP. Debe ser determinista. Reporta uso final (tokens restantes).Entrada: C R y luego timestamps (seg). Salida: por línea ALLOW/DROP; al final tokens=....4006_<ALIAS>_v1.(py|js|java)
4007Orquestador de tareas (secuencial + paralelo)Lee una lista de “tareas” (archivo con pasos con duración simulada en ms). Ejecuta secuencial y en “paralelo controlado” (máx N concurrentes). Mide t_total para ambos modos. Python: threading/concurrent.futures (sin asyncio), Node: Promise con pool simple, Java: ExecutorService. Determinista con semilla para jitter opcional.Entrada: JSON de tareas y N. Salida: seq=...ms y par(N)=...ms.4007_<ALIAS>_v1.(py|js|java)Py: threading/concurrent · Java: java.util.concurrent
4008Cache HTTP de archivos (ETag/Last-Modified)Dado un archivo estático servido localmente (o ruta), simula peticiones condicionales: guarda ETag (hash SHA-256 del contenido) y Last-Modified (mtime). Si el contenido no cambia, responde 304; si cambia, 200 y actualiza metadatos. No usar frameworks; solo stdlib.Entrada: ruta de archivo y secuencia de “peticiones”. Salida: una línea por petición con 200/304 y headers relevantes.4008_<ALIAS>_v1.(py|js|java)Py: hashlib/os · Node: fs/crypto · Java: Files/MessageDigest

Requisitos mínimos por mini-reto

  • E/S exacta (comparación literal).
  • 3 pruebas (entrada → salida) en comentarios al final del archivo.
  • Solo librería estándar (sin paquetes externos).
  • Nomenclatura exacta del archivo. Nombre incorrecto: −5%.
  • Donde se pida: semilla reproducible (--seed) y manejo de errores con mensajes exactos (ERROR:...).

App integrada (4900) — Service Stitcher

CódigoDebe reutilizarQué agregaEntregablesPuntaje máx.
49004001, 4002, 4003, 4004, 4005 (y opcional 4006/4007/4008)CLI que: (1) gestiona usuarios; (2) consume “APIs” desde mocks con backoff; (3) verifica webhooks HMAC; (4) valida tokens HS256; (5) realiza ETL CSV→JSON; (6) opcionalmente rate-limita y cachea recursos estáticos. Todo con módulos reutilizados de tus mini-retos.Carpeta 4900_<ALIAS>_app/ con README.md (comandos), src/, y carpeta mocks/ (JSON de ejemplo). Incluye un demo reproducible con --seed y un script de prueba (run_demo.*).260
  • Reutiliza tus módulos: impórtalos tal cual o muévelos a src/ sin reescribir.
  • Variables sensibles (SECRET, AUD) por .env o variables de entorno; no las “quemes”.
  • Incluye logs mínimos (timestamp, nivel, acción) sin romper el formato de salida requerido por los retos.

Puntajes — Nivel Integraciones

  • Mini-reto (máx. 120 pts): funciona (50%) · casos borde / 3 pruebas (20%) · robustez (errores, idempotencia, determinismo) (20%) · claridad (10%).
  • App 4900 (máx. 260 pts): integración real (50%) · diseño/cohesión (20%) · manejo de errores y configuración (20%) · README/demo reproducible (10%).

Bonificaciones creativas (opcionales, suman — tope +140 pts por equipo)

  • GUI/TUI para 4900 (Tkinter/Swing/Qt/curses) que opere usuarios, ETL y verificación de tokens: +40 pts.
  • OpenAPI 3.0 (yaml/json) describiendo los “endpoints” de tus mocks + colección Postman o httpie/curl scripts: +25 pts.
  • Dockerfile simple que ejecute el demo y monte mocks/: +25 pts.
  • CI (script de pruebas local, sin servicios externos) que corra tus casos y valide salidas: +20 pts.
  • Cache/Rate-limit integrados en 4900 (reuso de 4006/4008) con switches de línea de comandos: +15 pts.
  • Registro estructurado (JSON lines) opcional en 4900 sin romper la salida base: +15 pts.

Anti-IA desde la consigna (verificación incorporada)

  • Stdlib obligatoria: se evalúa uso de módulos nativos indicados (urllib/HttpClient/hmac/hashlib/sqlite3/fs...).
  • Determinismo: semillas, orden fijo y formatos literales (p. ej., ERROR:..., rutas, headers).
  • Seguridad: verificaciones HMAC/JWT precisas (Base64URL, reloj, audiencias).
  • Edición en vivo (≤2 min) en la defensa: se pedirá cambiar un header, un tiempo de backoff, o la clave HMAC para confirmar autoría.

Checklist final

  • 7 u 8 mini-retos con nombres correctos: 400x_<ALIAS>_vN.(py|js|java).
  • 3 pruebas en comentarios por archivo.
  • Si hiciste la app: 4900_<ALIAS>_app/ + README.md + mocks/ + demo reproducible.
  • PR: <ALIAS> — Entrega Nivel Integraciones.

Documentación

Python: urllib.request · sqlite3 · hmac · hashlib · base64 · csv
Node (≥18): fetch · crypto · fs
Java (≥11): HttpClient · Mac · Base64 · Files

About

Repositorio para la participación del Nivel Integraciones de Competencia CodExpress

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •