Skip to content

Commit c05e419

Browse files
committed
chore(milestone-2): Add seed for users service
Signed-off-by: SeeuSim <[email protected]>
1 parent a64859d commit c05e419

File tree

9 files changed

+76
-14
lines changed

9 files changed

+76
-14
lines changed

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
setup:
22
./scripts/install-deps.sh
3+
./scripts/ensure-volume.sh
4+
35

46
db-up:
57
./scripts/ensure-volume.sh

backend/question/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
"version": "1.0.0",
44
"main": "dist/index.js",
55
"scripts": {
6-
"seed": "env-cmd -f .env.local ts-node src/seeder/question-seeder.ts",
7-
"dev": "npm run seed && env-cmd -f .env.local nodemon src/index.ts | pino-pretty",
6+
"dev": "env-cmd -f .env.local nodemon src/index.ts | pino-pretty",
87
"build": "env-cmd -f .env.local tsc && tsc-alias",
98
"start": "env-cmd -f .env.local node dist/index.js",
109
"build:prod": "env-cmd -f .env.prod tsc && tsc-alias",

backend/question/src/lib/db/seed.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ const seedQuestions = async () => {
2727
}
2828
});
2929
} catch (error) {
30-
console.log('Error seeding question data', error);
30+
console.log('[Questions]: Error seeding question data', error);
3131
process.exit(1);
3232
}
3333
};
3434

3535
void seedQuestions()
3636
.then(() => {
37-
console.log('Seeding completed successfully.');
37+
console.log('[Questions]: Seeding completed successfully.');
3838
process.exit(0);
3939
})
4040
.catch((error) => {
41-
console.error('Error during seeding:', error);
41+
console.error('[Questions]: Error during seeding:', error);
4242
process.exit(1);
4343
});

backend/user/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"build:prod": "env-cmd -f .env.prod tsc && tsc-alias",
1010
"start:prod": "env-cmd -f .env.local node dist/index.js",
1111
"db:generate": "env-cmd -f .env.local drizzle-kit generate",
12-
"db:migrate": "env-cmd -f .env.local tsx drizzle.migrate.ts",
12+
"db:migrate": "env-cmd -f .env.local tsx ./src/lib/db/migrate.ts",
13+
"db:seed": "env-cmd -f .env.local tsx ./src/lib/db/seed.ts",
1314
"db:inspect": "env-cmd -f .env.local drizzle-kit studio",
1415
"fmt": "prettier --config .prettierrc src --write",
1516
"test": "echo \"Error: no test specified\" && exit 1"
File renamed without changes.

backend/user/src/lib/db/seed.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { generatePasswordHash } from '@/lib/passwords';
2+
import { db, users as usersTable } from '.';
3+
4+
const TEST_USER_CREDENTIALS = {
5+
username: 'testuser01',
6+
7+
firstName: 'test',
8+
lastName: 'user',
9+
password: '12345678', // For local testing purposes
10+
};
11+
12+
const main = async () => {
13+
await db.transaction(async (tx) => {
14+
// Clear all users
15+
try {
16+
await tx.delete(usersTable);
17+
18+
const password = generatePasswordHash(TEST_USER_CREDENTIALS.password);
19+
// Insert
20+
await tx
21+
.insert(usersTable)
22+
.values({
23+
...TEST_USER_CREDENTIALS,
24+
password,
25+
})
26+
.onConflictDoNothing();
27+
} catch (error) {
28+
console.error('[Users]: An error occurred while seeding: ' + String(error));
29+
process.exit(1);
30+
}
31+
});
32+
};
33+
34+
void main()
35+
.catch((err) => {
36+
if (err !== null) {
37+
console.error('[Users]: Error occurred during seeding: ' + String(err));
38+
process.exit(1);
39+
}
40+
})
41+
.then(() => {
42+
console.log('[Users]: Seeding completed successfully');
43+
process.exit(0);
44+
});

frontend/src/routes/login/logic.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,7 @@ import { useNavigate } from 'react-router-dom';
99

1010
export const loginFormSchema = z.object({
1111
username: z.string().min(1, getEmptyFieldErrorMessage('Username')),
12-
password: z
13-
.string()
14-
.min(8, 'Password must be at least 8 characters')
15-
.regex(/[A-Z]/, 'Password must contain at least one uppercase letter')
16-
.regex(/[a-z]/, 'Password must contain at least one lowercase letter')
17-
.regex(/[0-9]/, 'Password must contain at least one number')
18-
.regex(/[^A-Za-z0-9]/, 'Password must contain at least one special character'),
12+
password: z.string().min(1, getEmptyFieldErrorMessage('Password')),
1913
});
2014

2115
type ILoginFormSchema = z.infer<typeof loginFormSchema>;

frontend/src/routes/signup/logic.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,13 @@ export const signUpSchema = z
2626
.string()
2727
.min(2, getFieldMinLengthErrorMessage('Last Name', 2))
2828
.max(50, getFieldMaxLengthErrorMessage('Last Name', 50)),
29-
password: z.string().min(8, getFieldMinLengthErrorMessage('Password', 8)),
29+
password: z
30+
.string()
31+
.min(8, getFieldMinLengthErrorMessage('Password', 8))
32+
.regex(/[A-Z]/, 'Password must contain at least one uppercase letter')
33+
.regex(/[a-z]/, 'Password must contain at least one lowercase letter')
34+
.regex(/[0-9]/, 'Password must contain at least one number')
35+
.regex(/[^A-Za-z0-9]/, 'Password must contain at least one special character'),
3036
confirmPassword: z.string().min(8, getFieldMinLengthErrorMessage('Password', 8)),
3137
})
3238
.superRefine(({ password, confirmPassword }, ctx) => {

scripts/migrate-seed-databases.sh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/bin/sh
2+
3+
# Migrate Services
4+
for service in backend/*; do
5+
cd "$service"
6+
npm run db:migrate
7+
cd ../..
8+
done
9+
10+
# Seed Services
11+
seeded_services=("question" "user")
12+
for service in "${seeded_services[@]}"; do
13+
cd "backend/$service"
14+
npm run db:seed
15+
cd ../..
16+
done

0 commit comments

Comments
 (0)