From 11c69cc650deff65b05d8ed629a774c364decb73 Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Thu, 21 Mar 2024 16:40:04 +0900 Subject: [PATCH 1/3] Refactor: chat content validation --- src/modules/patterns.js | 1 + src/routes/chats.js | 7 +++---- src/routes/docs/schemas/chatsSchema.js | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 src/routes/docs/schemas/chatsSchema.js diff --git a/src/modules/patterns.js b/src/modules/patterns.js index 2fd1e4dc..bb24ce0a 100644 --- a/src/modules/patterns.js +++ b/src/modules/patterns.js @@ -15,5 +15,6 @@ module.exports = { chat: { chatImgType: RegExp("^(image/png|image/jpg|image/jpeg)$"), chatSendType: RegExp("^(text|account)$"), + chatContent: RegExp("\\S+"), //공백 제외 1글자 이상 }, }; diff --git a/src/routes/chats.js b/src/routes/chats.js index f689348c..f20de503 100644 --- a/src/routes/chats.js +++ b/src/routes/chats.js @@ -1,6 +1,8 @@ const express = require("express"); const { body } = require("express-validator"); const validator = require("../middlewares/validator"); +const { validateBody } = require("../middlewares/zod"); +const { chatsZod } = require("./docs/schemas/chatsSchema"); const patterns = require("../modules/patterns"); const router = express.Router(); @@ -47,10 +49,7 @@ router.post( */ router.post( "/send", - body("roomId").isMongoId(), - body("type").matches(patterns.chat.chatSendType), - body("content").isString(), - validator, + validateBody(chatsZod.sendChatHandler), chatsHandlers.sendChatHandler ); diff --git a/src/routes/docs/schemas/chatsSchema.js b/src/routes/docs/schemas/chatsSchema.js new file mode 100644 index 00000000..7e6fd978 --- /dev/null +++ b/src/routes/docs/schemas/chatsSchema.js @@ -0,0 +1,15 @@ +const { z } = require("zod"); +const { zodToSchemaObject } = require("../utils"); +const { objectId, chat } = require("../../../modules/patterns"); + +const chatsZod = { + sendChatHandler: z.object({ + roomId: z.string().regex(objectId), + type: z.string().regex(chat.chatSendType), + content: z.string().regex(chat.chatContent), + }), +}; + +const chatsSchema = zodToSchemaObject(chatsZod); + +module.exports = { chatsZod, chatsSchema }; From 1b898f3471c0c30c467e3866b24d6bfb145f3432 Mon Sep 17 00:00:00 2001 From: chlehdwon Date: Thu, 21 Mar 2024 16:40:27 +0900 Subject: [PATCH 2/3] Docs: add chatsSchema --- src/routes/docs/swaggerDocs.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/routes/docs/swaggerDocs.js b/src/routes/docs/swaggerDocs.js index 62639dfa..b0f51191 100644 --- a/src/routes/docs/swaggerDocs.js +++ b/src/routes/docs/swaggerDocs.js @@ -1,5 +1,6 @@ const { reportsSchema } = require("./schemas/reportsSchema"); const { roomsSchema } = require("./schemas/roomsSchema"); +const { chatsSchema } = require("./schemas/chatsSchema"); const reportsDocs = require("./reports"); const logininfoDocs = require("./logininfo"); const locationsDocs = require("./locations"); @@ -85,6 +86,7 @@ const swaggerDocs = { schemas: { ...reportsSchema, ...roomsSchema, + ...chatsSchema, }, }, }; From 5f58f324be648f9a64626716f25a771a58d0ca78 Mon Sep 17 00:00:00 2001 From: hwmin414 Date: Tue, 26 Mar 2024 23:50:02 +0900 Subject: [PATCH 3/3] feat: chat content regex sync with client --- src/modules/patterns.js | 3 ++- src/routes/docs/schemas/chatsSchema.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/modules/patterns.js b/src/modules/patterns.js index bb24ce0a..0d526dd8 100644 --- a/src/modules/patterns.js +++ b/src/modules/patterns.js @@ -15,6 +15,7 @@ module.exports = { chat: { chatImgType: RegExp("^(image/png|image/jpg|image/jpeg)$"), chatSendType: RegExp("^(text|account)$"), - chatContent: RegExp("\\S+"), //공백 제외 1글자 이상 + chatContent: RegExp("^\\s{0,}\\S{1}[\\s\\S]{0,}$"), // 왼쪽 공백 제외 최소 1개 문자 + chatContentLength: RegExp("^[\\s\\S]{1,140}$"), // 공백 포함 최대 140문자 }, }; diff --git a/src/routes/docs/schemas/chatsSchema.js b/src/routes/docs/schemas/chatsSchema.js index 7e6fd978..fa0ae257 100644 --- a/src/routes/docs/schemas/chatsSchema.js +++ b/src/routes/docs/schemas/chatsSchema.js @@ -6,7 +6,7 @@ const chatsZod = { sendChatHandler: z.object({ roomId: z.string().regex(objectId), type: z.string().regex(chat.chatSendType), - content: z.string().regex(chat.chatContent), + content: z.string().regex(chat.chatContent).regex(chat.chatContentLength), }), };