From be9a4c21eee9f1db8e066afeb1e0a5dd1902e306 Mon Sep 17 00:00:00 2001 From: Astrian Zheng Date: Sat, 11 Jan 2025 22:06:57 +1100 Subject: [PATCH] feat: enhance /payer route with email format validation and update HttpError class to use ErrorDescEnum --- backend/src/app.ts | 8 +++++--- backend/src/types/HttpError.d.ts | 20 +++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/backend/src/app.ts b/backend/src/app.ts index 5d8b05f..dc88a85 100644 --- a/backend/src/app.ts +++ b/backend/src/app.ts @@ -19,9 +19,11 @@ app.use(route.post('/payer', async (ctx) => { // TODO: 请求头验证 bearer token const { name, address, email, abn } = ctx.request.body - if (!name || !address || !email) { - ctx.throw(400, 'required_fields_missing') - } + if (!name || !address || !email) ctx.throw(400, 'required_fields_missing') + + // 验证邮箱格式 + const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ + if (!emailRegex.test(email)) ctx.throw(400, 'invalid_field_format') try { const payer = await func.createPayer(name, address, email, abn) diff --git a/backend/src/types/HttpError.d.ts b/backend/src/types/HttpError.d.ts index 4afcbff..72ff10d 100644 --- a/backend/src/types/HttpError.d.ts +++ b/backend/src/types/HttpError.d.ts @@ -8,6 +8,24 @@ class HttpError extends Error { * @param message 错误的消息。 * @param status 错误的状态码。 */ - constructor(message: 'required_fields_missing' | 'unknown_issues', status: number); + constructor(message: ErrorDescEnum, status: number); status: 400 | 401 | 403 | 404 | 500; +} + +/** + * 错误描述的枚举。 + */ +enum ErrorDescEnum { + /** + * 必填字段缺失。通常与 HTTP 状态码 400 Bad Request 一起使用。 + */ + required_fields_missing = 'required_fields_missing', + /** + * 字段格式不正确。通常与 HTTP 状态码 400 Bad Request 一起使用。 + */ + invalid_field_format = 'invalid_field_format', + /** + * 未知错误。通常与 HTTP 状态码 500 Internal Server Error 一起使用。 + */ + unknown_issues = 'unknown_issues' } \ No newline at end of file