SURCO · 20-implementation.md · 22 de 22

En esta página 1. Resumen ejecutivo técnico 0%

20 — Implementación — SURCO

1. Resumen ejecutivo técnico

CampoValor
App path/Users/cristian/orca/surco-app/
APINestJS · puerto 3007 · prefijo /api
WebAngular standalone · puerto 4200
DBNeon PostgreSQL · Prisma · old-paper-48739086
AuthJWT Bearer · roles FARMER | TECHNICIAN
DominioUser, Parcel, FieldTask
Fecha2026-08-07

2. Cómo arrancar

cd /Users/cristian/orca/surco-app
npm install --prefix apps/api
npm install --prefix apps/web
# Configurar apps/api/.env con DATABASE_URL y JWT_SECRET
npm run db:migrate
npm run db:seed
npm run api   # http://localhost:3007
npm run web   # http://localhost:4200

Credenciales

RolEmailPassword
FARMERcampo@surco.agropassword123
TECHNICIANtecnico@surco.agropassword123

3. Módulos API implementados

Auth

  • POST /api/auth/login
  • Valida email/password; compara bcrypt; emite JWT con sub, email, role.
  • JwtStrategy + JwtAuthGuard protegen tasks.

Tasks

MétodoRutaNotas
GET/api/tasksfiltro por rol
GET/api/tasks/stats/summarytotal, open, byStatus
GET/api/tasks/:idownership check
POST/api/taskssolo FARMER; parcela upsert; tech opcional
PATCH/api/tasks/:id/statusownership + reglas tech

Prisma

Enums Role, TaskStatus; modelos alineados a doc 05; migración init; seed con 2 parcelas y 5 tareas.

4. Frontend implementado

PáginaResponsabilidad
HomePagemarketing, hero, pasos, footer demo
LoginPageform → ApiService.login → navigate tasks
TasksPagestats + list + empty/error + logout
TaskNewPageform create (farmer)
TaskDetailPageget + patch status

ApiService centraliza base URL, token storage, métodos HTTP tipados (FieldTask, TaskStats, User).

5. Decisiones de implementación

DecisiónRazón
Puerto API 3007Evitar colisión con otros daily apps
Soft auth en páginasSimple L2; API sigue siendo autoridad
Parcela por nombre en createMenos pantallas CRUD en L2
Status ACTIVE al asignar techSeñal de “en marcha” sin paso extra
Templates inline standaloneVelocidad de entrega daily; componentes autocontenidos
Stats en endpoint propioEvita recalcular en cliente y permite evolución

6. Variables de entorno

VariableServicioDescripción
DATABASE_URLAPINeon connection string
JWT_SECRETAPIFirma tokens
PORTAPIopcional, 3007

Web: URL de API configurable en service (default localhost:3007).

7. Smoke de implementación (mínimo)

  1. Seed OK en consola (SURCO seed OK).
  2. Login farmer 200.
  3. List length ≥ 1.
  4. Create task 201/200.
  5. Login tech ve tarea si asignada.
  6. Patch DONE 200.
  7. Web muestra badges en español.

8. Estructura de ficheros clave

apps/api/src/main.ts
apps/api/src/auth/*
apps/api/src/tasks/*
apps/api/prisma/schema.prisma
apps/api/prisma/seed.ts
apps/web/src/app/app.routes.ts
apps/web/src/app/core/api.service.ts
apps/web/src/app/pages/**/**
apps/web/tailwind.config.js
apps/web/src/styles.css

9. Despliegue (notas)

No obligatorio para cierre local del case. Sugerencia:

PiezaOpción
APIRailway / Fly / Render
WebNetlify / Vercel (static Angular)
DBNeon (ya)
CORSorígenes del front deploy

10. Criterios de aceptación de implementación

  1. Comandos del README reproducen el entorno.
  2. Ambos roles demuestran flujos distintos.
  3. 403/401 correctos en pruebas de authz.
  4. UI usa tokens de marca (no default blue Tailwind).
  5. Case docs enlazan Paper, Neon id, puertos y demos.