@zaamx/netme-viajes
v0.0.2
Published
Módulo Viajes (incentivo por millas) para Netme/GoLife: campañas, catálogo de acciones, simulador y admin; el motor de cálculo vive en SQL netme_viaje_*.
Maintainers
Readme
@zaamx/netme-viajes
Programa de viajes de incentivo por millas para Netme (GoLife). Plugin Medusa v2 mínimo:
crea solo las tablas de configuración (netme_viaje_*) y expone workflows, API admin/store y
páginas de admin. Todo el cálculo de millas vive en SQL (netme_viaje_* en el repo del motor,
dbGoLife/supabase/migrations/20260925000001_modulo_viajes_motor.sql) y el plugin lo consume por
la conexión de Medusa (@InjectManager). Mismo patrón "base mínima + SQL por cliente" que @zaamx/netme.
Spec: docs/spec-viajes-golife.md. Diseño y runbook: dbGoLife/supabase/docs/24-modulo-viajes.md.
Instalación (core mlm-medusa)
// medusa-config.ts
plugins: [
{ resolve: "@zaamx/netme", options: {} },
{ resolve: "@zaamx/netme-viajes", options: {} }, // después de @zaamx/netme
]yarn add @zaamx/netme-viajes
npx medusa db:migrate # desde el core: crea las tablas netme_viaje_* (módulo netmeViajes)
# luego, en la base del motor: psql -f supabase/migrations/20260925000001_modulo_viajes_motor.sqlOrden obligatorio: migración del plugin (tablas) → migración SQL del motor (funciones que las leen).
Desarrollo
yarn install && yarn build # tsc + admin (vite)
npx tsc -p src/admin/tsconfig.json --noEmit # type-check del admin (vite no lo hace)
DB_HOST=127.0.0.1 DB_PORT=54322 DB_USERNAME=postgres DB_PASSWORD=postgres npx medusa plugin:db:generate
bash dev.sh # plugin:publish (yalc) + plugin:add en el core + plugin:developTras cada cambio en modo dev: plugin:publish + plugin:add en el core + reiniciar yarn dev del core.
Estructura
src/modules/netme-viajes/ módulo netmeViajes: models/ (solo entidades DML), types.ts, defaults.ts,
service.ts (CRUD + bridge SQL), migrations/ (generadas por CLI)
src/workflows/ toda mutación (crear/editar/activar/cerrar/clonar campaña, versión N,
simular, objetivo, recalcular ciclo, eventos, asistencias, ajustes)
src/api/admin/viajes/ rutas admin (GET/POST/DELETE) + validators.ts (zod); src/api/middlewares.ts
src/api/store/viajes/ /store/viajes/mi-progreso (vista del afiliado)
src/admin/ routes/viajes (lista) y routes/viajes/[id] (detalle con pestañas), components/viajes
docs/ spec, modelo de datos, API y adminGotchas
- Claves de
MedusaService({...})= PascalCase exacto delmodel.define; la pluralización de TIPOS difiere de la de runtime (EventoesvsEventos): el service exponecrearEventos/borrarEventos. models/*.tssolo exporta entidades DML (plugin:db:generatetoma cualquier export como entidad).- Arrays a Postgres en
manager.execute: literal'{1,2,3}'::bigint[](knex expande arrays JS a listas). - Nunca abrir conexiones propias a Postgres: solo
@InjectManager()/PG_CONNECTIONdel container.
