api: seed a known e2e user with an idempotent prisma seed
The mobile suite needs an account it can log in as, and the only seed around truncated the users table, which made it unusable against the dev database This adds `npm run seed`, wired through Prisma, so we can have a e2e@example.com with some data
Pedro Lucas Porcellis porcellis@eletrotupi.com · 1 month ago
be9c517d2305507b06ffd6f1a02d61ad11819488 Browse filesParents
1495e32Changed files
3
Additions
+35
Deletions
-1
api/package.json
1 1
{
2 2
"name": "orbit-api",
3 3
"version": "0.0.0",
4 4
"description": "",
5 5
"license": "ISC",
16 16
"test:watch": "dotenv -e .env.test -o -- vitest",
17 17
"test:setup": "npm run test:setup:db && npm run test:setup:generate && npm run test:setup:migrate",
18 18
"test:setup:db": "dotenv -e .env.test -o -- node scripts/create-test-db.mjs",
19 19
"test:setup:generate": "dotenv -e .env.test -o -- npx prisma generate",
20 20
"test:setup:migrate": "dotenv -e .env.test -o -- npx prisma db push",
21 -
"dev": "prisma generate && prisma migrate deploy && npm run start"
21 +
"dev": "prisma generate && prisma migrate deploy && npm run start",
22 +
"seed": "dotenv -e .env.development -o -- npx prisma db seed"
22 23
},
23 24
"dependencies": {
24 25
"@aws-sdk/client-s3": "^3.1048.0",
25 26
"@prisma/adapter-better-sqlite3": "^7.5.0",
26 27
"@prisma/adapter-pg": "^7.7.0",
67 68
"typescript": "^6.0.2",
68 69
"vite-tsconfig-paths": "^5.1.4",
69 70
"vitest": "^3.0.0"
70 71
}
71 72
}
api/prisma.config.ts
1 1
import { defineConfig } from "prisma/config";
2 2
3 3
export default defineConfig({
4 4
schema: "prisma/schema.prisma",
5 5
migrations: {
6 6
path: "prisma/migrations",
7 +
seed: "node scripts/seed-dev.mjs",
7 8
},
8 9
datasource: {
9 10
url: process.env["DATABASE_URL"],
10 11
},
11 12
});
/dev/null → api/scripts/seed-dev.mjs
1 +
import pg from 'pg'
2 +
import bcrypt from 'bcryptjs'
3 +
4 +
const { Client } = pg
5 +
6 +
const dbUrl = process.env.DATABASE_URL
7 +
const email = process.env.SEED_EMAIL ?? 'e2e@example.com'
8 +
const password = process.env.SEED_PASSWORD ?? 'e2e-password'
9 +
10 +
if (!dbUrl) {
11 +
console.error('DATABASE_URL is not set')
12 +
process.exit(1)
13 +
}
14 +
15 +
const db = new Client({ connectionString: dbUrl })
16 +
await db.connect()
17 +
18 +
const hash = bcrypt.hashSync(password, 10)
19 +
const { rows } = await db.query(
20 +
`INSERT INTO users (first_name, last_name, email, encrypted_password, active, updated_at)
21 +
VALUES ($1, $2, $3, $4, true, NOW())
22 +
ON CONFLICT (email) DO UPDATE
23 +
SET encrypted_password = EXCLUDED.encrypted_password,
24 +
active = true,
25 +
updated_at = NOW()
26 +
RETURNING id, email`,
27 +
['E2E', 'User', email, hash],
28 +
)
29 +
30 +
await db.end()
31 +
32 +
console.log(`Seeded user: ${rows[0].email} (id ${rows[0].id})`)