Checkpoint independiente · Bloque 3 · Unidad 3.1
EX-B3-S01-01
Separar routers y schemas
Recibes una API distinta a la del ejemplo: registra solicitudes de cumplimiento, permite consultarlas y tomar una decisión. Funciona y está probada, pero vive en un único módulo.
Cómo abordarla
Separa responsabilidades conservando el contrato
Inténtalo desde el starter nuevo y sin copiar el ensayo anterior. La estructura y el orden del cambio son tuyos; los tests deben demostrar el contrato.
Evidencia objetivo: En un dominio distinto y sin una secuencia de archivos prescrita, modularizas la aplicación y justificas su grafo de imports.
Abrir práctica extendida: base común y 1 parte
Base común
- El starter arranca y sus tests deben estar verdes antes de editar.
- El contrato público y los datos sintéticos son distintos al ejercicio guiado.
- Cada parte declara qué mecanismo puede añadirse; persistencia, autenticación, servicios y auto-registro siguen fuera.
- Los criterios dicen qué conservar, no qué carpetas debes crear.
Paquete de trabajo
- Starter de solicitudes de cumplimientoAplicación monolítica funcional, tests de regresión, brief y plantilla de evidencia; sin solución modular.
Entorno, evidencia y reinicio
Entorno: Python 3.10+ en un workspace temporal; FastAPI, Pydantic 2, pytest y httpx2 instalados por el paquete con uv.
- Commit o diff del refactor sin cambios funcionales.
- Salida completa de pytest antes y después.
- Fingerprint OpenAPI y diagrama de imports final.
Revisión: con Codex, utilizando los artefactos y criterios de cada parte; no se publica una solución oficial.
Reinicio: Descomprimir de nuevo el starter en otro directorio temporal; cada intento empieza con el monolito y sus tests verdes.
Parte 1 · Apoyo autónomo
EX-B3-S01-01 · Separar routers y schemas
Modularizar un contexto nuevo sin copiar el árbol del ejemplo y defender cada frontera mediante evidencia de regresión.
Qué debes hacer
- Sin abrir las pistas de EX-B3-01, predice las rutas finales y dibuja el grafo de imports que quieres conseguir.
- Ejecuta el baseline y guarda el fingerprint de operaciones y operationId.
- Separa composición, frontera HTTP y schemas con la estructura mínima que puedas justificar.
- Repite la regresión, inspecciona OpenAPI y documenta una separación que decidiste no hacer.
Entrega esperada
- Repositorio refactorizado sin funcionalidad nueva.
- before-after.md con comandos, resultados y diferencias observadas.
- Diagrama breve de imports y nota de decisión arquitectónica.
Criterios de aceptación
- Los seis tests suministrados pasan antes y después.
- Los cuatro pares método/path y sus operationId no cambian.
- No hay imports desde routers o schemas hacia main.py.
- La aplicación registra routers de forma explícita y un módulo omitido desaparece de OpenAPI de forma diagnosticable.
- La entrega explica por qué la estructura elegida es suficiente ahora y dónde se detuvo el refactor.
Evidencia para revisión
- Predicción y fingerprint previos al cambio.
- Diff, árbol y grafo de imports finales.
- Misma salida de pytest y mismo contrato público al terminar.
Reinicio de esta parte: Volver a descomprimir el starter; no reutilizar módulos del ejercicio guiado.