From 97062c0635c79e44bcfa06a4077b672f415d97d8 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Wed, 29 May 2024 01:27:51 +0200 Subject: [PATCH] added zod for easier validation (wip) --- package-lock.json | 12 +++++++++++- package.json | 3 ++- src/app/events/CharacterCreate.ts | 15 +++++++++++---- src/app/services/CharacterService.ts | 3 ++- src/app/types/zod/CharacterCreate.ts | 5 +++++ src/app/utilities/Config.ts | 3 ++- 6 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 src/app/types/zod/CharacterCreate.ts diff --git a/package-lock.json b/package-lock.json index 1ae384e..1f72fbb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,8 @@ "prisma": "^5.13.0", "socket.io": "^4.7.5", "ts-node": "^10.9.2", - "typescript": "^5.4.5" + "typescript": "^5.4.5", + "zod": "^3.23.8" }, "devDependencies": { "@types/bcryptjs": "^2.4.6", @@ -1907,6 +1908,15 @@ "engines": { "node": ">=6" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index b2ab58d..35eff62 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "prisma": "^5.13.0", "socket.io": "^4.7.5", "ts-node": "^10.9.2", - "typescript": "^5.4.5" + "typescript": "^5.4.5", + "zod": "^3.23.8" }, "devDependencies": { "@types/bcryptjs": "^2.4.6", diff --git a/src/app/events/CharacterCreate.ts b/src/app/events/CharacterCreate.ts index 17b84ce..39a8d31 100644 --- a/src/app/events/CharacterCreate.ts +++ b/src/app/events/CharacterCreate.ts @@ -2,14 +2,21 @@ import { Socket, Server } from "socket.io"; import {TSocket} from "../types/TSocket"; import {Character} from "@prisma/client"; import CharacterRepository from "../repositories/CharacterRepository"; +import {ZCharacterCreate} from "../types/zod/CharacterCreate"; export default function CharacterCreate(socket: TSocket, io: Server) { socket.on('character:create', async (data: any) => { - let user_id = socket.user?.id as number; + // zod validate + try { + data = ZCharacterCreate.parse(data); - let character: Character = await CharacterRepository.create(user_id, data.name) as Character; - let characters: Character[] = await CharacterRepository.getByUserId(user_id) as Character[]; + let user_id = socket.user?.id as number; + let character: Character = await CharacterRepository.create(user_id, data.name) as Character; + let characters: Character[] = await CharacterRepository.getByUserId(user_id) as Character[]; - socket.emit('character:list', characters); + socket.emit('character:list', characters); + } catch (error: any) { + return socket.emit('notification', {error: error.errors[0].message}); + } }); } \ No newline at end of file diff --git a/src/app/services/CharacterService.ts b/src/app/services/CharacterService.ts index c7505b2..f166cbc 100644 --- a/src/app/services/CharacterService.ts +++ b/src/app/services/CharacterService.ts @@ -1,6 +1,7 @@ import {Character} from "@prisma/client"; -class CharacterService { +class CharacterService +{ } diff --git a/src/app/types/zod/CharacterCreate.ts b/src/app/types/zod/CharacterCreate.ts new file mode 100644 index 0000000..d3536d2 --- /dev/null +++ b/src/app/types/zod/CharacterCreate.ts @@ -0,0 +1,5 @@ +import { z } from 'zod'; + +export const ZCharacterCreate = z.object({ + name: z.string().min(3).max(255) +}); \ No newline at end of file diff --git a/src/app/utilities/Config.ts b/src/app/utilities/Config.ts index a68e8fd..7f39426 100644 --- a/src/app/utilities/Config.ts +++ b/src/app/utilities/Config.ts @@ -2,7 +2,8 @@ import dotenv from "dotenv"; dotenv.config(); -class config { +class config +{ static ENV: string = process.env.ENV || "prod"; static PORT: number = process.env.PORT ? parseInt(process.env.PORT) : 5000; static JWT_SECRET: string = process.env.JWT_SECRET || "secret";