Skip to content

Commit e29a256

Browse files
committed
refactor(seed): optimized seeder for database with real-alike data
1 parent 382abe2 commit e29a256

File tree

17 files changed

+2963
-948
lines changed

17 files changed

+2963
-948
lines changed

package.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,8 @@
2222
"db:generate": "drizzle-kit generate",
2323
"db:studio": "drizzle-kit studio",
2424
"db:push": "drizzle-kit push",
25-
"db:push:test": "cross-env NODE_ENV=test drizzle-kit push",
2625
"db:migrate": "node -r esbuild-register src/@base/drizzle/migrate.ts",
27-
"db:clear": "node -r esbuild-register src/@base/drizzle/clear.ts",
28-
"db:clear:test": "cross-env NODE_ENV=test node -r esbuild-register src/@base/drizzle/clear.ts",
2926
"db:migrate:drop": "drizzle-kit drop",
30-
"db:test:start": "bash ./utils/seed/start-db.sh",
31-
"db:test:push": "drizzle-kit push --config ./utils/seed/drizzle.config.ts",
32-
"db:test:seed": "node -r esbuild-register ./utils/seed/index.ts",
33-
"prepare:test": "yarn db:test:start && yarn db:test:push && yarn db:test:seed",
3427
"bench": "k6 run ./utils/bench/index.js"
3528
},
3629
"dependencies": {

utils/seed/.env.example

Lines changed: 0 additions & 6 deletions
This file was deleted.

utils/seed/Dockerfile

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
FROM node:22-slim AS builder
2+
3+
WORKDIR /app
4+
5+
# Install build dependencies for native modules (argon2)
6+
RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*
7+
8+
# Copy package files and install dependencies
9+
COPY package.json yarn.lock ./
10+
RUN yarn install --frozen-lockfile
11+
12+
# Copy TypeScript config and source files
13+
COPY tsconfig.json ./
14+
COPY utils/seed ./utils/seed
15+
COPY src/@base/drizzle ./src/@base/drizzle
16+
17+
# Bundle the seed script with esbuild
18+
RUN npx esbuild utils/seed/seed.ts \
19+
--bundle \
20+
--platform=node \
21+
--outfile=seed.js \
22+
--external:pg \
23+
--external:argon2
24+
25+
# Dependencies stage
26+
FROM node:22-slim AS deps
27+
28+
WORKDIR /app
29+
30+
# Install build dependencies for argon2 native compilation
31+
RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*
32+
33+
# Install only runtime dependencies
34+
RUN yarn add pg@8.11.3 argon2@0.41.1
35+
36+
# Runner stage (non-root)
37+
FROM node:22-slim AS runner
38+
39+
WORKDIR /app
40+
41+
# Create non-root user
42+
RUN groupadd --system --gid 1001 nodejs && \
43+
useradd --system --uid 1001 --gid nodejs seeduser
44+
45+
# Copy dependencies and bundled script
46+
COPY --from=deps /app/node_modules ./node_modules
47+
COPY --from=builder /app/seed.js ./
48+
COPY src/@base/drizzle/migrations ./src/@base/drizzle/migrations
49+
50+
# Set ownership to non-root user
51+
RUN chown -R seeduser:nodejs /app
52+
53+
ENV NODE_ENV=production
54+
55+
# Switch to non-root user
56+
USER seeduser
57+
58+
CMD ["node", "seed.js"]
59+

utils/seed/chunker.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

utils/seed/config.ts

Lines changed: 14 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,16 @@
1-
export type SeedConfig = {
2-
restaurants: number;
3-
restaurantOwners: number;
4-
workers: number;
5-
dishMenusPerOwner: number;
6-
dishesPerMenu: number;
1+
export const SEED_CONFIG = {
2+
restaurants: 20,
3+
restaurantOwners: 2,
4+
workers: 100,
5+
dishMenusPerOwner: 2,
6+
dishesPerMenu: 20,
7+
workshopsPerRestaurant: 5,
8+
dishModifiersPerRestaurant: 10,
79
orders: {
8-
justCreated: number;
9-
justCreatedWithDishes: number;
10-
sentToKitchen: number;
11-
};
12-
};
13-
14-
export type SeedVariant = "mini" | "huge" | "insane";
15-
16-
export const seedConfigVariants: Record<SeedVariant, SeedConfig> = {
17-
mini: {
18-
restaurants: 10,
19-
restaurantOwners: 2,
20-
workers: 100,
21-
dishMenusPerOwner: 1,
22-
dishesPerMenu: 50,
23-
orders: {
24-
justCreated: 100,
25-
justCreatedWithDishes: 100,
26-
sentToKitchen: 100,
27-
},
28-
},
29-
huge: {
30-
restaurants: 100,
31-
restaurantOwners: 4,
32-
workers: 4000,
33-
dishMenusPerOwner: 2,
34-
dishesPerMenu: 100,
35-
orders: {
36-
justCreated: 100_000,
37-
justCreatedWithDishes: 100_000,
38-
sentToKitchen: 100_000,
39-
},
10+
justCreated: 1_000,
11+
justCreatedWithDishes: 1_000,
12+
sentToKitchen: 1_000,
4013
},
41-
insane: {
42-
restaurants: 100,
43-
restaurantOwners: 4,
44-
workers: 4000,
45-
dishMenusPerOwner: 2,
46-
dishesPerMenu: 100,
47-
orders: {
48-
justCreated: 1_000_000,
49-
justCreatedWithDishes: 1_000_000,
50-
sentToKitchen: 1_000_000,
51-
},
52-
},
53-
};
14+
} as const;
15+
16+
export type SeedConfig = typeof SEED_CONFIG;

0 commit comments

Comments
 (0)