SURCO · 06-tech-stack.md · 8 de 22

En esta página 1. Resumen 0%

06 — Stack tecnológico — SURCO

1. Resumen

CapaTecnologíaVersión / nota
FrontendAngular (standalone components)App en apps/web
EstilosTailwind CSSTokens en tailwind.config.js
BackendNestJSApp en apps/api
ORMPrismaschema + migrate + seed
DBNeon (PostgreSQL serverless)project old-paper-48739086
AuthJWT (Passport strategy + guard)Header Authorization: Bearer
Validación APIclass-validator + DTOsLogin, create, status
Passwordbcryptcost 10 en seed
DiseñoPaperfile 01KZDGF3509TA4WDZTTQJW1V45
FuentesGoogle Fonts Literata + Manropestyles.css

Stack fijo de la serie ALS-2: no se sustituye Angular/Nest/Neon/Tailwind sin excepción documentada.

2. Estructura monorepo app

surco-app/
├── package.json          # scripts api / web / db:*
├── apps/
│   ├── api/
│   │   ├── prisma/
│   │   │   ├── schema.prisma
│   │   │   ├── seed.ts
│   │   │   └── migrations/
│   │   ├── src/
│   │   │   ├── main.ts
│   │   │   ├── app.module.ts
│   │   │   ├── auth/
│   │   │   ├── tasks/
│   │   │   └── prisma/
│   │   └── package.json
│   └── web/
│       ├── src/app/
│       │   ├── pages/ (home, login, tasks, task-detail, task-new)
│       │   ├── core/api.service.ts
│       │   └── app.routes.ts
│       ├── tailwind.config.js
│       └── package.json
└── README.md

Decisión: apps independientes (npm --prefix), sin npm workspaces que rompan Angular (directiva D-P1-03).

3. Puertos y entornos

ServicioPuertoURL local
API Nest3007http://localhost:3007
Web Angular4200http://localhost:4200
Prefijo API/apip. ej. POST /api/auth/login

Variables típicas API (.env):

VarUso
DATABASE_URLNeon connection string
JWT_SECRETFirma de tokens
PORT3007 (si aplica)

4. Backend — módulos

MóduloResponsabilidad
AuthModulelogin, JWT emit, strategy, guard
TasksModuleCRUD parcial de FieldTask + stats
PrismaModulecliente Prisma global

Endpoints

MétodoPathAuthRol
POST/api/auth/loginNo
GET/api/tasksJWTFARMER / TECHNICIAN
GET/api/tasks/stats/summaryJWTFARMER / TECHNICIAN
GET/api/tasks/:idJWTparte de la tarea
POST/api/tasksJWTFARMER only
PATCH/api/tasks/:id/statusJWTparte + reglas status

CORS: habilitado para dev web en :4200 (según main.ts).

5. Frontend — arquitectura

PiezaDetalle
Routingapp.routes.ts — 5 rutas + wildcard
Estado authlocalStorage token + user en ApiService
HTTPHttpClient vía service
UITemplates inline en componentes standalone
GuardSoft-guard en ngOnInit (redirect si no token)

Rutas

PathPágina
''HomePage
loginLoginPage
app/tasksTasksPage
app/tasks/newTaskNewPage
app/tasks/:idTaskDetailPage

6. Diseño → código

Token marcaUso Tailwind app (aprox.)
Bonebg-bg #F3F0E8
Leafprimary #3A5A40
Strawstraw #C4A574
Borderborder #E0D9CC
Displayfont-display Literata
Sansfont-sans Manrope

7. Scripts npm (raíz app)

npm run api        # Nest start:dev :3007
npm run web        # ng serve :4200
npm run db:migrate # prisma migrate
npm run db:seed    # seed demo

Instalación:

npm install --prefix apps/api
npm install --prefix apps/web

8. Seguridad técnica (resumen; ver doc 11)

ControlImplementación
Passwordsbcrypt hash
SesiónJWT bearer
Autorizaciónguard + checks farmer/technician
ValidaciónDTOs class-validator
Secretos.env no commitear

9. Observabilidad

v1: logs Nest por defecto; sin APM. Errores de UI se muestran como copy al usuario. Analytics de producto: doc 12 (modelo).

10. Criterios de aceptación técnicos

  1. npm run api levanta en 3007 y responde login seed.
  2. npm run web sirve en 4200 y consume API.
  3. Prisma migrate + seed generan 2 users y 5 tasks.
  4. ng build (o serve) sin errores de compilación.
  5. Rutas de tasks sin JWT → 401.