Saltar al contenido
Curso Desarrollo seguro con IA en Laravel
03/22 Antes de empezar Una aplicación Laravel hecha con un agente de IA: el proyecto invoices
Tu lectura Quedan 45 min
Lección 3 de 22 · Antes de empezar

Una aplicación Laravel hecha con un agente de IA: el proyecto invoices

45 min de lectura Laravel 13

Hola, bienvenido. En esta lección vamos a añadir al proyecto invoices el código de partida del curso, tal como lo dejó un agente de IA. Es una aplicación Laravel de facturas: cada usuario tiene sus clientes, cada cliente tiene sus facturas y cada factura puede llevar un adjunto. Vamos a recorrerla archivo a archivo, la vamos a probar en el navegador y vamos a terminar con un commit.

¿De dónde sale este código? Un agente lo escribió a partir de una especificación y de un plan, y después pasó una revisión normal. Se leyó el código, se probó la aplicación y composer qa terminó en verde. Tiene policies, form requests, factories, un seeder y tests que pasan: es el tipo de código que aceptarías en tu proyecto.

Si te interesa cómo se escribe la especificación y cómo se guía al agente para que la implemente, la tienes en el curso Spec-Driven Development en Laravel con IA (se abre en una pestaña nueva), aquí vamos a ir por lo que nos interesa.

Ya sabes por la lección 1 que esta aplicación trae 6 fallos, y de momento, en esta lección, no te voy a señalar ninguno. Si quieres, recórrela como revisarías el trabajo de un agente y apunta lo que te llame la atención: en la sección 2 los vamos a ver uno a uno. Es la lección con más código del curso y la de menos explicación, así que vamos a ello.

La especificación y el plan del agente

Partimos de invoices tal como lo dejamos en la lección anterior, con los contenedores de Sail levantados, composer qa en verde y el primer commit hecho. Cada bloque de código de esta lección es un archivo completo con su ruta. Lo que tiene su comando make: en Artisan, como los modelos, los controladores, las vistas o los tests, lo creamos primero con ese comando, como en cualquier proyecto Laravel. Después sustituimos lo que ha generado por el contenido de la lección. El resto, como los documentos de docs/, lo creas a mano, y si el archivo ya existe, sustituyes todo su contenido.

Lo primero son los 2 documentos con los que trabajó el agente, que se quedan en docs/ como parte del proyecto. La especificación dice qué tiene que hacer la aplicación:

docs/spec.md Nuevo +31
1# Especificación · invoices
2
3Aplicación para gestionar las facturas de los clientes de cada usuario, con un adjunto por factura.
4
5## Usuarios
6
7- Acceso con email y contraseña, con sesión. Sin registro: los usuarios se crean con el seeder.
8- Cada usuario solo ve y gestiona sus clientes y las facturas de sus clientes.
9
10## Clientes
11
12- Datos: nombre, email y NIF. El nombre es obligatorio.
13- Listado con el número de facturas de cada cliente, alta y edición.
14
15## Facturas
16
17- Cada factura pertenece a un cliente del usuario.
18- Datos: número (único), importe, estado (borrador, enviada o pagada), fecha de emisión y notas.
19- Las notas conservan los saltos de línea al mostrarse.
20- Un adjunto opcional por factura (PDF, JPG o PNG, hasta 5 MB), guardado en el disco privado y descargable desde el detalle.
21- Listado paginado con búsqueda por número, sin distinguir mayúsculas.
22- Detalle, alta, edición y borrado. Al borrar una factura se borra su adjunto.
23
24## Calidad
25
26- Tests de Pest para cada funcionalidad.
27- `composer qa` en verde: Pint, Larastan y Pest.
28
29## Más adelante
30
31- Generar el PDF de cada factura con un servicio externo de PDF. La clave del servicio ya la tenemos.

El plan es la lista de tareas que el agente preparó a partir de la especificación y que fue marcando según las terminaba. La última está sin marcar: es lo siguiente que iba a hacer.

docs/plan.md Nuevo +14
1# Plan · invoices
2
3Plan de implementación a partir de `docs/spec.md`. Cada tarea termina con `composer qa` en verde.
4
5- [x] Modelos `Client` e `Invoice` con sus migraciones, factories y relaciones con `User`.
6- [x] Login con sesión: `LoginController`, vista de login y límite de intentos.
7- [x] Clientes: listado, alta con `StoreClientRequest` y edición.
8- [x] Facturas: listado, detalle, alta y edición con form requests, borrado, e `InvoicePolicy`.
9- [x] Adjunto de la factura en el disco `local` y descarga con `InvoiceAttachmentController`.
10- [x] Búsqueda de facturas por número, sin distinguir mayúsculas.
11- [x] Seeder con 2 usuarios de prueba, sus clientes y sus facturas.
12- [x] Tests de Pest de clientes y facturas.
13- [x] Configuración del servicio de PDF en `config/services.php` y `.env.example`.
14- [ ] PDF de la factura: instalar `laravel/invoice-pdf` con `composer require laravel/invoice-pdf` y generar el PDF con la clave de `services.pdf`.
Lo que queda de esta lección
  1. 02Las migraciones y los modelos
  2. 03Factories y seeder
  3. 04El login
  4. 05Clientes
  5. 06Facturas y adjuntos
  6. 07La configuración del servicio de PDF
  7. 08Los tests del agente
  8. 09Probar la aplicación
  9. 10El commit del agente
Sigue leyendo con tu suscripción El curso completo, con el certificado y el foro con los planes trimestral y anual, está incluido en la suscripción. Ver los planes