From 267e61cc7fd43e465e54913236e0809d4f813ace Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sat, 1 Jun 2024 15:24:03 +0200 Subject: [PATCH] Bug fix for register, added delete character logic (WIP), npm update --- package-lock.json | 6 ++--- src/app/events/CharacterCreate.ts | 2 +- src/app/events/CharacterDelete.ts | 23 +++++++++++++++++++ src/app/repositories/CharacterRepository.ts | 13 +++++++++++ .../zod/{CharacterCreate.ts => Character.ts} | 4 ++++ src/app/utilities/Http.ts | 2 +- 6 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 src/app/events/CharacterDelete.ts rename src/app/types/zod/{CharacterCreate.ts => Character.ts} (57%) diff --git a/package-lock.json b/package-lock.json index 0705693..c7c7d26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -250,9 +250,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.12.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.13.tgz", - "integrity": "sha512-gBGeanV41c1L171rR7wjbMiEpEI/l5XFQdLLfhr/REwpgDy/4U8y89+i8kRiLzDyZdOkXh+cRaTetUnCYutoXA==", + "version": "20.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.13.0.tgz", + "integrity": "sha512-FM6AOb3khNkNIXPnHFDYaHerSv8uN22C91z098AnGccVu+Pcdhi+pNUFDi0iLmPIsVE0JBD0KVS7mzUYt4nRzQ==", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" diff --git a/src/app/events/CharacterCreate.ts b/src/app/events/CharacterCreate.ts index 39a8d31..802cff6 100644 --- a/src/app/events/CharacterCreate.ts +++ b/src/app/events/CharacterCreate.ts @@ -2,7 +2,7 @@ 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"; +import {ZCharacterCreate} from "../types/zod/Character"; export default function CharacterCreate(socket: TSocket, io: Server) { socket.on('character:create', async (data: any) => { diff --git a/src/app/events/CharacterDelete.ts b/src/app/events/CharacterDelete.ts new file mode 100644 index 0000000..16fc595 --- /dev/null +++ b/src/app/events/CharacterDelete.ts @@ -0,0 +1,23 @@ +import { Socket, Server } from "socket.io"; +import {TSocket} from "../types/TSocket"; +import {Character} from "@prisma/client"; +import CharacterRepository from "../repositories/CharacterRepository"; +import {ZCharacterDelete} from "../types/zod/Character"; + +export default function CharacterCreate(socket: TSocket, io: Server) { + socket.on('character:delete', async (data: any) => { + // zod validate + try { + data = ZCharacterDelete.parse(data); + + await CharacterRepository.delete(data.character_id); + + let user_id = socket.user?.id as number; + let characters: Character[] = await CharacterRepository.getByUserId(user_id) as Character[]; + + 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/repositories/CharacterRepository.ts b/src/app/repositories/CharacterRepository.ts index 643ae09..8cf1bda 100644 --- a/src/app/repositories/CharacterRepository.ts +++ b/src/app/repositories/CharacterRepository.ts @@ -46,6 +46,19 @@ class CharacterRepository { throw new Error(`Failed to create character: ${error.message}`); } } + + async delete(id: number): Promise { + try { + return await prisma.character.delete({ + where: { + id, + }, + }); + } catch (error: any) { + // Handle error + throw new Error(`Failed to delete character: ${error.message}`); + } + } } export default new CharacterRepository; \ No newline at end of file diff --git a/src/app/types/zod/CharacterCreate.ts b/src/app/types/zod/Character.ts similarity index 57% rename from src/app/types/zod/CharacterCreate.ts rename to src/app/types/zod/Character.ts index d3536d2..bab3000 100644 --- a/src/app/types/zod/CharacterCreate.ts +++ b/src/app/types/zod/Character.ts @@ -2,4 +2,8 @@ import { z } from 'zod'; export const ZCharacterCreate = z.object({ name: z.string().min(3).max(255) +}); + +export const ZCharacterDelete = z.object({ + character_id: z.number() }); \ No newline at end of file diff --git a/src/app/utilities/Http.ts b/src/app/utilities/Http.ts index 2f78302..beecae3 100644 --- a/src/app/utilities/Http.ts +++ b/src/app/utilities/Http.ts @@ -31,7 +31,7 @@ async function addAuthRoutes(app: Application) { if (user) { const token = jwt.sign({ id: user.id }, config.JWT_SECRET, { expiresIn: '1h' }); - return res.status(201).json({ token }); + return res.status(200).json({ token }); } return res.status(400).json({ message: 'Failed to register user' }); });