Skip to content

Commit e4b63b7

Browse files
committed
feat: update E2E testing configuration for Node.js backend, enhancing log retrieval based on backend type and improving Redis memory management settings in Docker
1 parent 30c6759 commit e4b63b7

File tree

8 files changed

+190
-259
lines changed

8 files changed

+190
-259
lines changed

.github/workflows/frontend-e2e.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,11 @@ jobs:
216216
docker compose logs --tail=50 redis-e2e
217217
echo ""
218218
echo "📋 ${{ matrix.backend_name }} Logs:"
219-
docker compose logs --tail=100 ${{ matrix.container_name }}
219+
if [ "${{ matrix.backend }}" == "nodejs" ]; then
220+
docker compose logs --tail=100 backend-nodejs-e2e || echo "Could not retrieve logs for backend-nodejs-e2e"
221+
else
222+
docker compose logs --tail=100 backend-e2e || echo "Could not retrieve logs for backend-e2e"
223+
fi
220224
221225
- name: Stop E2E environment
222226
if: always()

backend-nodejs/cmd/server/main.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,18 @@ async function main() {
3939
let db: ReturnType<typeof createDatabaseConnection>;
4040
try {
4141
db = createDatabaseConnection(config.database);
42-
// 测试连接
43-
// await db.selectFrom('users').select('id').limit(1).execute();
42+
// 测试连接(实际执行查询以确保连接可用)
43+
await db.selectFrom('users').select('id').limit(1).execute();
4444
console.log('✅ Database connected');
4545
} catch (error) {
4646
console.error('❌ Failed to connect to database:', error);
4747
console.error(' Make sure PostgreSQL is running and schema is applied');
48+
console.error(' Connection details:', {
49+
host: config.database.host,
50+
port: config.database.port,
51+
database: config.database.database,
52+
user: config.database.user,
53+
});
4854
process.exit(1);
4955
}
5056

backend-nodejs/infrastructure/bootstrap/server.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import Fastify, { type FastifyInstance, type FastifyRequest, type FastifyReply } from 'fastify';
77
import cors from '@fastify/cors';
8+
import { serializerCompiler, validatorCompiler, type ZodTypeProvider } from 'fastify-type-provider-zod';
89
import type { Config } from '../config/config.js';
910
import type { Kysely } from 'kysely';
1011
import type { Database } from '../persistence/postgres/database.js';
@@ -18,6 +19,7 @@ import { register } from '../monitoring/metrics/metrics.js';
1819

1920
/**
2021
* 创建 Fastify 服务器
22+
* 注册 Zod type provider 以支持直接使用 Zod schema
2123
*/
2224
export function createServer(config: Config): FastifyInstance {
2325
const fastify = Fastify({
@@ -34,7 +36,11 @@ export function createServer(config: Config): FastifyInstance {
3436
}
3537
: undefined,
3638
},
37-
});
39+
}).withTypeProvider<ZodTypeProvider>();
40+
41+
// 注册 Zod validator 和 serializer
42+
fastify.setValidatorCompiler(validatorCompiler);
43+
fastify.setSerializerCompiler(serializerCompiler);
3844

3945
return fastify;
4046
}

backend-nodejs/infrastructure/config/config.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ const ConfigSchema = z.object({
3232
db: z.coerce.number().int().nonnegative().default(0),
3333
}),
3434
jwt: z.object({
35-
secret: z.string().min(32, 'JWT secret must be at least 32 characters'),
35+
secret: z.string().min(1, 'JWT secret is required').refine(
36+
(val) => val.length >= 32 || process.env.NODE_ENV === 'test',
37+
{ message: 'JWT secret must be at least 32 characters (except in test mode)' }
38+
),
3639
accessTokenExpiry: z.coerce.number().int().positive().default(3600), // 1 小时
3740
refreshTokenExpiry: z.coerce.number().int().positive().default(604800), // 7 天
3841
issuer: z.string().default('go-genai-stack'),
@@ -87,9 +90,9 @@ export function loadConfig(): Config {
8790
} catch (error) {
8891
if (error instanceof z.ZodError) {
8992
console.error('❌ Configuration validation failed:');
90-
error.errors.forEach((err) => {
91-
const path = err.path.join('.');
92-
console.error(` ${path}: ${err.message}`);
93+
error.issues.forEach((issue) => {
94+
const path = issue.path.join('.');
95+
console.error(` ${path}: ${issue.message}`);
9396
});
9497
console.error('\nPlease check your environment variables and .env file.');
9598
process.exit(1);

backend-nodejs/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"dependencies": {
3131
"@fastify/cors": "^10.0.1",
3232
"@fastify/rate-limit": "^9.1.0",
33+
"fastify-type-provider-zod": "^6.0.0",
3334
"@types/bcryptjs": "^3.0.0",
3435
"@types/jsonwebtoken": "^9.0.10",
3536
"@types/supertest": "^6.0.3",
@@ -43,7 +44,7 @@
4344
"prom-client": "^15.1.3",
4445
"redis": "^4.6.13",
4546
"supertest": "^7.1.4",
46-
"zod": "^3.23.8"
47+
"zod": "^4.1.5"
4748
},
4849
"devDependencies": {
4950
"@types/node": "^22.5.0",

backend-nodejs/pnpm-lock.yaml

Lines changed: 73 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)