Práctica extendida · Bloque 2
EX-B2-S01
Admisiones internas por contrato
Un equipo necesita recibir solicitudes de admisión, consultar su estado y rechazar entradas incoherentes antes de incorporar persistencia.
Cómo abordarla
Aplicación progresiva sobre una base ejecutable
Mantén el mismo workspace entre partes y cierra cada checkpoint con código ejecutable, pruebas y una respuesta HTTP o traza.
Abrir práctica extendida: base común y 3 partes
Base común
- El identificador lo asigna el servidor y todo el estado vive en memoria.
- La referencia pública, el departamento y el periodo se validan; no hay login ni base de datos.
- Cada parte parte del checkpoint aceptado de la anterior.
Paquete de trabajo
- Starter de la serie de admisionesProyecto parcial, peticiones y plantilla de checkpoints sin solución.
Entorno, evidencia y reinicio
Entorno: Workspace temporal con Python 3.10+, uv, FastAPI y Pydantic 2; estado en memoria.
- Tres checkpoints ejecutables y un OpenAPI por parte.
- Matriz de peticiones válidas e inválidas con status, headers y body.
Revisión: con Codex, utilizando los artefactos y criterios de cada parte; no se publica una solución oficial.
Reinicio: Eliminar el workspace de la serie y volver a descargar el starter; cada parte conserva un checkpoint separado.
Parte 1 · Apoyo alto
EX-B2-S01-P1 · Rutas y fuentes HTTP
Definir creación, consulta y listado con sus fuentes, obligatoriedad y status provisionales.
Qué debes hacer
- Implementa las tres operaciones sobre una lista en memoria.
- Declara correlación y paginación sin mezclarlas con el body.
- Compara firmas y OpenAPI con la matriz del starter.
Entrega esperada
- Checkpoint P1
- openapi-p1.json
- evidence-p1.md
Criterios de aceptación
- Métodos y rutas son coherentes con identidad y colección.
- Las fuentes aparecen correctamente en OpenAPI.
- No existe infraestructura fuera de alcance.
Evidencia para revisión
- OpenAPI con las rutas y fuentes acordadas.
- Cuatro peticiones curl que distingan path, query, header y body.
Reinicio de esta parte: Conservar el checkpoint anterior fuera del starter o volver a descomprimir una copia limpia para repetir esta parte.
Pista · Diseña desde HTTP
- Empieza por método, path y status; después escribe la firma.
Parte 2 · Apoyo moderado
EX-B2-S01-P2 · Modelos y reglas
Separar create, update y public; añadir enums, anidación y una regla cruzada.
Qué debes hacer
- Modela solicitante, periodo y estado.
- Ubica restricciones y validadores en el nivel adecuado.
- Implementa patch parcial conservando campos omitidos.
Entrega esperada
- Checkpoint P2
- model-matrix.md
- invalid-cases.md
Criterios de aceptación
- Los modelos de operación están separados.
- La regla cruzada produce una localización útil.
- El patch no pisa campos ausentes.
Evidencia para revisión
- Modelos Pydantic y errores de muestras.
- Diferencia demostrada entre omitido y null.
Reinicio de esta parte: Conservar el checkpoint anterior fuera del starter o volver a descomprimir una copia limpia para repetir esta parte.
Pista · Propiedad de los campos
- Marca primero quién asigna y quién puede modificar cada campo.
Parte 3 · Apoyo ligero
EX-B2-S01-P3 · Salida y errores
Cerrar el contrato observable con filtrado, estados, Location y errores consistentes.
Qué debes hacer
- Aplica modelos públicos a todas las respuestas.
- Añade `201` y `Location` a creación.
- Unifica not found, conflicto y validación.
- Documenta las respuestas adicionales.
Entrega esperada
- Checkpoint P3
- openapi-final.json
- contract-evidence.md
Criterios de aceptación
- No se filtran notas internas.
- Errores y éxitos coinciden con OpenAPI.
- La colección sigue siendo puramente en memoria.
Evidencia para revisión
- Respuestas públicas, Location y errores uniformes.
- OpenAPI final y regresión de filtrado.
Reinicio de esta parte: Conservar el checkpoint anterior fuera del starter o volver a descomprimir una copia limpia para repetir esta parte.
Pista · Revisa como cliente
- Inspecciona status, headers y body; no solo el valor devuelto por Python.