Adds the unified Customer API against the migrated data: - customers.service: list (search across name/email/phone/city/legacy id, business-line filter, pagination + per-row _count flags), detail (identity + legacyRefs + properties/services/trust + policies with installments/vehicles/ drivers/beneficiaries/claims/docs + recent transactions + a per-domain/ currency ledger summary), and stats. - customers.controller: GET /customers, /customers/:id, /customers/stats, guarded by AuthenticatedGuard. Registered in AppModule. - Fix LocalAuthGuard to call super.logIn so a session is actually established (login previously succeeded but persisted no session -> 403 afterwards). - apps/api/scripts/seed-user.mjs: idempotent Argon2 admin seed. Tooling: adopt pnpm as the package manager (machine npm is a pnpm shim that ignores the workspaces field). Add pnpm-workspace.yaml (+ onlyBuiltDependencies for argon2/prisma/nest native builds), switch the api's @jorgecuadros/database dep to workspace:*, add @types/passport, track pnpm-lock.yaml, drop the stale package-lock.json. Verified end-to-end against the dev DB: login sets a session cookie; stats returns 1682 customers / 526 both-lines / 45861 transactions; search + detail return the full cross-line customer view (properties+services AND policies AND a unified transaction statement). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
25 lines
1.0 KiB
JavaScript
25 lines
1.0 KiB
JavaScript
// Seed an initial staff sign-in user. Idempotent (upsert by email).
|
|
// Run with the target DATABASE_URL in the environment, e.g.:
|
|
// DATABASE_URL="mysql://..." node apps/api/scripts/seed-user.mjs
|
|
// Optional: SEED_EMAIL, SEED_PASSWORD, SEED_NAME (dev defaults below).
|
|
import { createRequire } from "node:module";
|
|
const require = createRequire(import.meta.url);
|
|
const argon2 = require("argon2");
|
|
const { PrismaClient } = require("@jorgecuadros/database");
|
|
|
|
const email = process.env.SEED_EMAIL || "admin@jorgecuadros.local";
|
|
const password = process.env.SEED_PASSWORD || "ChangeMe!2026";
|
|
const name = process.env.SEED_NAME || "Administrador";
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
const passwordHash = await argon2.hash(password);
|
|
const user = await prisma.user.upsert({
|
|
where: { email },
|
|
update: { passwordHash, active: true, role: "ADMIN", name },
|
|
create: { email, passwordHash, active: true, role: "ADMIN", name },
|
|
});
|
|
console.log(`seeded user: ${user.email} (role ${user.role})`);
|
|
console.log(` password: ${password}`);
|
|
await prisma.$disconnect();
|