Lizandro Guarnizo and Claude Sonnet 4.6
d9062ce754
fix: copy .prisma to correct pnpm versioned path in Docker runner stage
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-23 00:32:19 -05:00
Lizandro Guarnizo
2587826fa6
fix(api): copy @prisma/client package from pnpm store to deploy
2026-06-23 00:22:44 -05:00
Lizandro Guarnizo
b7db0d6741
fix(api): pnpm deploy + copy prisma generated client
2026-06-23 00:13:14 -05:00
Lizandro Guarnizo
34b4c2d6d2
fix(api): flatten pnpm symlinks with cp -rL for docker COPY
2026-06-23 00:05:29 -05:00
Lizandro Guarnizo
b875fe2af4
fix(api): copy full node_modules instead of pnpm deploy to preserve prisma client
2026-06-23 00:02:03 -05:00
Lizandro Guarnizo
17302ee746
fix(api): copy prisma generated files from builder to runner
2026-06-22 23:59:54 -05:00
Lizandro Guarnizo
0ec04560d4
fix(api): Dockerfile explícito para dist+node_modules; quitar image: para forzar build en Coolify
2026-06-18 23:11:01 -05:00
Lizandro Guarnizo
6aa6897f4d
fix(api): usar pnpm deploy para resolver symlinks rotos de pnpm en runner
2026-06-18 23:06:47 -05:00
Lizandro Guarnizo
596dc18e82
fix(api): quitar migrate del startup para desacoplar deploy de BD
2026-06-18 22:59:50 -05:00
Lizandro Guarnizo
71cd021e60
update
2026-06-18 21:40:52 -05:00
Lizandro Guarnizo
b63447af8d
chore: remove .npmrc
2026-06-18 21:39:23 -05:00
Lizandro Guarnizo and Claude Sonnet 4.6
b4cbb672e0
fix(coolify): quitar ports y red custom para evitar conflictos en despliegue
...
Coolify usa Traefik como proxy — los ports fijos causan conflicto si el
puerto ya está ocupado. Se elimina también moraworld-network (nombre fijo
choca con redes de deploys anteriores); Coolify gestiona su propia red.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-18 21:39:23 -05:00
Lizandro Guarnizo
5f488f698c
update
2026-06-18 18:16:07 -05:00
Lizandro Guarnizo and Claude Sonnet 4.6
db19f3e1ca
fix(security): rate limiting, forbidNonWhitelisted, Prisma migrations en startup y CI para GHCR
...
- ThrottlerGuard global: 20 req/min por IP en todos los endpoints
- forbidNonWhitelisted: true en ValidationPipe
- Dockerfile API: prisma migrate deploy antes de arrancar el proceso
- coolify-compose: depends_on api (service_healthy) en web
- GitHub Actions: build y push de imágenes api/web a GHCR en cada push a main
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-18 17:06:35 -05:00
Lizandro Guarnizo
1b49e3fc0e
ci: copiar packages/database al runner (no linkeado en hoisted)
2026-06-09 22:03:24 -05:00
Lizandro Guarnizo
83133eef17
ci: single-stage builder + hoisted (elimina deps stage, muy problematico)
2026-06-09 22:00:11 -05:00
Lizandro Guarnizo
ed24880944
ci: --force en pnpm install para evitar confirmacion interactiva
2026-06-09 21:58:40 -05:00
Lizandro Guarnizo
6c2c993ea7
ci: regenerar lockfile en builder (rm + pnpm install --no-frozen)
2026-06-09 21:56:12 -05:00
Lizandro Guarnizo
333c1aba58
ci: --no-frozen-lockfile explicito (Coolify corre con CI=true)
2026-06-09 21:54:44 -05:00
Lizandro Guarnizo
b0d22d4c15
ci: pnpm install sin frozen-lockfile en builder (lockfile actualizado con workspace completo)
2026-06-09 21:52:25 -05:00
Lizandro Guarnizo
7cd5138ab9
ci: node-linker=hoisted para compatibilidad con Docker COPY
2026-06-09 21:49:45 -05:00
Lizandro Guarnizo
e5e22e4f58
ci: cambiar host port web 3000->3002 (otro servicio usa 3000)
2026-06-09 21:47:53 -05:00
Lizandro Guarnizo
e4abd806bb
ci: Dockerfiles funcionales - ambos builds exitosos en servidor
2026-06-09 21:38:24 -05:00
Lizandro Guarnizo
a6b9edd256
ci: pnpm install sin --offline (descarga solo faltante del store)
2026-06-09 21:33:05 -05:00
Lizandro Guarnizo
4ef190c7a2
ci: pnpm install --offline en builder para recrear symlinks de workspace
2026-06-09 21:32:18 -05:00
Lizandro Guarnizo
dd62a048d2
ci: quitar prisma generate del web (next no lo necesita)
2026-06-09 21:30:47 -05:00
Lizandro Guarnizo
8c6fd24ed8
ci: usar npx prisma en vez de pnpm exec (prisma no esta en root node_modules)
2026-06-09 21:30:05 -05:00
Lizandro Guarnizo
941ba09978
debug: check prisma binary location
2026-06-09 21:29:12 -05:00
Lizandro Guarnizo
dca9e7a879
ci: corregir ruta de prisma generate - ejecutar desde packages/database
2026-06-09 21:28:33 -05:00
Lizandro Guarnizo
6425976918
ci: usar pnpm exec prisma en vez de global (evita auto-install)
2026-06-09 21:27:51 -05:00
Lizandro Guarnizo
60350e4343
ci: quitar database/dist del web (no existe en deps)
2026-06-09 21:27:03 -05:00
Lizandro Guarnizo
b2d9d06cbe
ci: copiar packages/database/dist desde deps (excluido por .dockerignore)
2026-06-09 21:21:09 -05:00
Lizandro Guarnizo
9fe1d29e75
ci: volver a enfoque multi-stage estandar con prisma global en builder
2026-06-09 21:18:30 -05:00
Lizandro Guarnizo
696b29df10
ci: .prisma esta en node_modules raiz (pnpm hoisted)
2026-06-09 21:12:48 -05:00
Lizandro Guarnizo
37e39db85d
ci: COPY . . antes que deps para no pisar prisma generado
2026-06-09 21:10:22 -05:00
Lizandro Guarnizo
675f3bf0e5
ci: copiar packages/database completo en deps y generar prisma ahi
2026-06-09 21:06:01 -05:00
Lizandro Guarnizo
d3cab7539e
ci: debug web — ls schema, which prisma, prisma version
2026-06-09 20:58:40 -05:00
Lizandro Guarnizo
8459ecc33d
ci: fix prisma generate — instalar prisma global, limpiar dockerignore
2026-06-09 20:57:13 -05:00
Lizandro Guarnizo
52f5f66b54
ci: debug prisma generate — show actual error in logs
2026-06-09 20:55:05 -05:00
Lizandro Guarnizo
dfc5e5233a
ci: set DATABASE_URL env in builder for prisma generate
2026-06-09 20:47:21 -05:00
Lizandro Guarnizo
30cfa67bab
ci: web Dockerfile copia database package.json y genera Prisma client
2026-06-09 20:35:31 -05:00
Lizandro Guarnizo
fb3b62ea44
ci: quita depends_on de api — redis/postgres solo en profile storage
2026-06-09 20:32:00 -05:00
Lizandro Guarnizo
933dd75ca3
ci: docker-compose.yml usa profiles para BD/Redis/MinIO — Coolify usa default (solo api+web)
2026-06-09 20:28:27 -05:00
Lizandro Guarnizo
8f2de37c0d
feat(storage): auto-create S3 bucket on module init
2026-06-04 21:33:54 -05:00
Lizandro Guarnizo
fff5e198b7
ci: Coolify deployment config — docker-compose, env example, docs, dockerignore
2026-06-04 20:55:38 -05:00
Lizandro Guarnizo
84c1fdec54
feat: C-8/C-1/C-2/C-3/C-4/C-6/M-1/M-5/M-6 — WebSocket gateway, SENAE real, SP-API, Twilio SMS, WhatsApp Business, soporte portal, HMAC audit, reportes CSV
2026-06-01 21:28:42 -05:00
Lizandro Guarnizo
a5842278fb
fix: C-7 webhook tenant lookup, C-5 full tax calc §15, M-2/M-3/M-4/M-8/L-7/L-8/L-9 gap fixes
2026-06-01 21:10:43 -05:00
Lizandro Guarnizo
a047a8b032
feat: StorageService S3/MinIO, POST /users, invoice upload, portal dashboard §08 statuses + notifications
2026-06-01 20:55:30 -05:00
Lizandro Guarnizo
98ab5a309c
feat: Stripe Checkout, Zeptomail, pre-alert linking, perfil 3-tab, carga-pesada landing
...
- payments: real Stripe Checkout Session (redirect flow), confirmBySession, webhook handler
- notifications: Zeptomail REST email, wa.me WhatsApp links, IntegrationsService injection
- auth: changePassword, updateProfile, disableMfa (TOTP-verified) endpoints
- packages: tryLinkPreAlert() auto-links on create (non-blocking)
- integrations: catalog updated (zeptomail, stripe_webhook_secret; removed sendgrid/whatsapp-api)
- web/portal/perfil: 3-tab layout (datos / contraseña / MFA)
- web/portal/pago: Stripe redirect + ?success=1&session_id= callback, cancelled banner
- web/admin/b2b: fix enum values (EN_COTIZACION, ACEPTADO)
- web/carga-pesada: rich marketing landing (FCL/LCL, 7-step process, sectors, INEN callout)
- tests: fix payments.service.spec (IntegrationsService+ConfigService mocks)
- tests: fix notifications.service.spec (IntegrationsService mock, phone in mockUser)
- all 104 tests passing, API + web builds clean
2026-06-01 20:24:35 -05:00
Lizandro Guarnizo
b2f03e654f
feat: timestamp component (§19), admin B2B page (§13)
...
## §19 Zona horaria
- New _components/timestamp.tsx: Intl.DateTimeFormat-based, auto-detects
timezone from user role in localStorage
· OPERADOR_BODEGA → America/New_York (EST/EDT)
· All others → America/Guayaquil (ECT)
- Integrated in portal/mis-paquetes (list dates + status history)
- Integrated in portal/pago (paidAt timestamp)
- Integrated in admin/auditoria (replaces hardcoded toLocaleString)
## §13 B2B Admin page (/admin/b2b)
- Full admin UI for B2B import requests
- KPIs: total, pendientes, cotizados, aprobados, valor total cotizaciones
- Table with search + status filter
- Gestionar modal: change status, enter quotation amount + notes
- Uses api.b2b.list() + api.b2b.updateStatus()
- Added B2B link to admin sidebar nav
Build: clean (Next.js, no TS errors)
2026-06-01 18:35:46 -05:00