1
0
forked from noxious/server

added zod for easier validation (wip)

This commit is contained in:
Dennis Postma 2024-05-29 01:27:51 +02:00
parent 58ca3fac22
commit 97062c0635
6 changed files with 33 additions and 8 deletions

12
package-lock.json generated
View File

@ -14,7 +14,8 @@
"prisma": "^5.13.0", "prisma": "^5.13.0",
"socket.io": "^4.7.5", "socket.io": "^4.7.5",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typescript": "^5.4.5" "typescript": "^5.4.5",
"zod": "^3.23.8"
}, },
"devDependencies": { "devDependencies": {
"@types/bcryptjs": "^2.4.6", "@types/bcryptjs": "^2.4.6",
@ -1907,6 +1908,15 @@
"engines": { "engines": {
"node": ">=6" "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"
}
} }
} }
} }

View File

@ -14,7 +14,8 @@
"prisma": "^5.13.0", "prisma": "^5.13.0",
"socket.io": "^4.7.5", "socket.io": "^4.7.5",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typescript": "^5.4.5" "typescript": "^5.4.5",
"zod": "^3.23.8"
}, },
"devDependencies": { "devDependencies": {
"@types/bcryptjs": "^2.4.6", "@types/bcryptjs": "^2.4.6",

View File

@ -2,14 +2,21 @@ import { Socket, Server } from "socket.io";
import {TSocket} from "../types/TSocket"; import {TSocket} from "../types/TSocket";
import {Character} from "@prisma/client"; import {Character} from "@prisma/client";
import CharacterRepository from "../repositories/CharacterRepository"; import CharacterRepository from "../repositories/CharacterRepository";
import {ZCharacterCreate} from "../types/zod/CharacterCreate";
export default function CharacterCreate(socket: TSocket, io: Server) { export default function CharacterCreate(socket: TSocket, io: Server) {
socket.on('character:create', async (data: any) => { socket.on('character:create', async (data: any) => {
let user_id = socket.user?.id as number; // zod validate
try {
data = ZCharacterCreate.parse(data);
let user_id = socket.user?.id as number;
let character: Character = await CharacterRepository.create(user_id, data.name) as Character; let character: Character = await CharacterRepository.create(user_id, data.name) as Character;
let characters: Character[] = await CharacterRepository.getByUserId(user_id) 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});
}
}); });
} }

View File

@ -1,6 +1,7 @@
import {Character} from "@prisma/client"; import {Character} from "@prisma/client";
class CharacterService { class CharacterService
{
} }

View File

@ -0,0 +1,5 @@
import { z } from 'zod';
export const ZCharacterCreate = z.object({
name: z.string().min(3).max(255)
});

View File

@ -2,7 +2,8 @@ import dotenv from "dotenv";
dotenv.config(); dotenv.config();
class config { class config
{
static ENV: string = process.env.ENV || "prod"; static ENV: string = process.env.ENV || "prod";
static PORT: number = process.env.PORT ? parseInt(process.env.PORT) : 5000; static PORT: number = process.env.PORT ? parseInt(process.env.PORT) : 5000;
static JWT_SECRET: string = process.env.JWT_SECRET || "secret"; static JWT_SECRET: string = process.env.JWT_SECRET || "secret";