Elegir espacio

Dos espacios

¿Qué quieres consultar?

Elige el espacio al que quieres entrar.

Biblioteca FastAPIPersistencia

Checkpoint independiente · Bloque 4 · Unidad 4.3

EX-B4-S01-03

Guardar una factura con sus líneas de forma atómica

Una API distinta evoluciona desde una factura plana hasta operaciones persistentes y una factura con líneas que debe guardarse como una sola unidad.

  • Escribir y ejecutar código
  • Checkpoint acumulativo
  • Media-alta
  • Apoyo autónomo
  • Starter ejecutable

Cómo abordarla

Haz que integridad y atomicidad sean observables

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 facturas, diseñas cabecera, líneas, constraint y límite transaccional desde criterios visibles, sin copiar la transferencia guiada ni recibir pistas.

Abrir práctica extendida: base común y 1 parte

Base común

  • Cada starter conserva cinco tests de continuidad verdes y expone criterios de aceptación inicialmente rojos.
  • No contiene SQLModel, solución, pistas escalonadas ni una arquitectura de carpetas prescrita.
  • Las partes 01–03 avanzan de persistencia plana a operaciones y después a cabecera, líneas e integridad transaccional.
  • Cada parte parte de la evidencia anterior, pero llega como paquete independiente para que el estado local no falsee el resultado.

Paquete de trabajo

  • Checkpoint de atomicidad de facturasAPI de facturas planas equivalente a la parte 02 y cuatro criterios rojos para diseñar líneas, constraints y una creación atómica; sin pistas ni solución.

Entorno, evidencia y reinicio

Entorno: Python 3.10+ en un workspace temporal; FastAPI 0.141, SQLModel 0.0.39, pytest y httpx2 instalados por el paquete con uv.

  • Predicción independiente de ciclos de vida, contrato y frontera transaccional.
  • Resultados del baseline y de los criterios ejecutables de cada parte.
  • Pruebas propias de Session, consultas y ausencia de estado parcial.

Revisión: con Codex, utilizando los artefactos y criterios de cada parte; no se publica una solución oficial.

Reinicio: Volver a descomprimir el paquete de la parte activa en otro directorio y eliminar solo los SQLite creados por ese intento.

Parte 3 · Apoyo autónomo

EX-B4-S01-03 · Guardar una factura con sus líneas de forma atómica

Transferir relaciones, constraints y frontera transaccional al dominio de facturas, diseñando una creación de cabecera y líneas sin estado parcial.

Qué debes hacer
  1. Predice tablas, claves, constraints, subtotal y filas sobrevivientes antes de editar.
  2. Ejecuta continuidad y aceptación y diseña modelos de entrada, tabla, relación y salida desde los criterios visibles.
  3. Implementa POST /invoice-batches con posiciones únicas, cantidades y precios positivos, y subtotal calculado en servidor.
  4. Guarda cabecera y líneas como una sola unidad; demuestra rollback completo si una línea viola una invariante.
  5. Añade una prueba estructural o traza propia y documenta una decisión, una alternativa descartada y el límite del alcance.
Entrega esperada
  • Código y tests añadidos sin archivos SQLite generados.
  • evidence.md con DDL previsto/observado, comandos, resultados y frontera transaccional.
  • Estado persistente y respuesta HTTP de un caso válido y otro inválido.
Criterios de aceptación
  • Los cinco tests de continuidad permanecen verdes y los cuatro criterios nuevos terminan verdes.
  • invoice_lines tiene FK a invoices, UNIQUE compuesta por invoice_id y position, y checks positivos para quantity y unit_price_cents.
  • POST /invoice-batches crea una cabecera con dos líneas y devuelve subtotal_cents calculado en 12300.
  • Si una línea falla, la respuesta no es 201 y la base conserva cero cabeceras y cero líneas de esa operación.
  • La operación realiza un único commit; usa flush si necesita la clave y rollback antes de reutilizar la Session.
  • No se anticipan importación masiva, savepoints, aislamiento, reintentos, cascadas automáticas, migraciones o PostgreSQL.
Evidencia para revisión
  • DDL previsto para FK, UNIQUE(invoice_id, position) y checks monetarios.
  • Cinco pruebas de continuidad verdes y cuatro criterios inicialmente rojos que terminan verdes.
  • Conteo de filas tras creación válida y tras fallo de una línea intermedia.

Reinicio de esta parte: Descomprimir de nuevo esta parte y borrar solo su base local; no copiar los starters guiados de tags, organizaciones o transferencias.