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",
"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"
}
}
}
}

View File

@ -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",

View File

@ -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});
}
});
}

View File

@ -1,6 +1,7 @@
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();
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";