Improved validation, added tags field to objects, fixed and improved character delete logics
This commit is contained in:
parent
3c0b713af0
commit
6b30d9db1d
@ -0,0 +1,5 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE `Object` ADD COLUMN `tags` JSON NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE `Tile` MODIFY `tags` JSON NULL;
|
@ -22,7 +22,7 @@ datasource db {
|
||||
model Tile {
|
||||
id String @id @default(uuid())
|
||||
name String
|
||||
tags Json
|
||||
tags Json?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
@ -30,6 +30,7 @@ model Tile {
|
||||
model Object {
|
||||
id String @id @default(uuid())
|
||||
name String
|
||||
tags Json?
|
||||
origin_x Decimal @default(0)
|
||||
origin_y Decimal @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
|
@ -1,23 +1,30 @@
|
||||
import {Server} from "socket.io";
|
||||
import {TSocket} from "../../utilities/Types";
|
||||
import {Character} from "@prisma/client";
|
||||
import { Character, Zone } from '@prisma/client'
|
||||
import CharacterRepository from "../../repositories/CharacterRepository";
|
||||
import {ZCharacterDelete} from "../../utilities/ZodTypes";
|
||||
|
||||
type TypePayload = {
|
||||
character_id: number;
|
||||
}
|
||||
|
||||
type TypeResponse = {
|
||||
zone: Zone;
|
||||
characters: Character[];
|
||||
}
|
||||
|
||||
export default function (socket: TSocket, io: Server) {
|
||||
socket.on('character:delete', async (data: any) => {
|
||||
socket.on('character:delete', async (data: TypePayload, callback: (response: TypeResponse) => void) => {
|
||||
// zod validate
|
||||
try {
|
||||
data = ZCharacterDelete.parse(data);
|
||||
|
||||
await CharacterRepository.deleteByUserIdAndId(socket.user?.id as number, data.id as number);
|
||||
await CharacterRepository.deleteByUserIdAndId(socket.user?.id as number, data.character_id as number);
|
||||
|
||||
const user_id = socket.user?.id as number;
|
||||
const 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});
|
||||
console.log(error);
|
||||
return socket.emit('notification', {message: 'Character delete failed. Please try again.'});
|
||||
}
|
||||
});
|
||||
}
|
@ -6,6 +6,7 @@ import { Object } from '@prisma/client'
|
||||
interface IPayload {
|
||||
id: string;
|
||||
name: string;
|
||||
tags: string[];
|
||||
origin_x: number;
|
||||
origin_y: number;
|
||||
}
|
||||
@ -23,7 +24,7 @@ export default function (socket: TSocket, io: Server) {
|
||||
}
|
||||
|
||||
try {
|
||||
const object = await ObjectRepository.update(data.id, data.name, data.origin_x, data.origin_y);
|
||||
const object = await ObjectRepository.update(data.id, data.name, data.tags, data.origin_x, data.origin_y);
|
||||
|
||||
callback(true);
|
||||
} catch (error) {
|
||||
|
@ -22,11 +22,12 @@ class ObjectRepository {
|
||||
});
|
||||
}
|
||||
|
||||
async update(id: string, name: string, origin_x: number, origin_y: number): Promise<Object> {
|
||||
async update(id: string, name: string, tags: string[], origin_x: number, origin_y: number): Promise<Object> {
|
||||
return prisma.object.update({
|
||||
where: { id },
|
||||
data: {
|
||||
name,
|
||||
tags,
|
||||
origin_x,
|
||||
origin_y
|
||||
},
|
||||
|
@ -1,29 +1,28 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
export const loginAccountSchema = z.object({
|
||||
username: z.string().min(3, {
|
||||
message: 'Username must be at least 3 characters long'
|
||||
}).max(255),
|
||||
username:z.string()
|
||||
.min(3, { message: 'Name must be at least 3 characters long' })
|
||||
.max(255, { message: 'Name must be at most 255 characters long' })
|
||||
.regex(/^[A-Za-z][A-Za-z0-9_-]*$/, { message: 'Name must start with a letter and can only contain letters, numbers, underscores, or dashes' }),
|
||||
password: z.string().min(8, {
|
||||
message: 'Password must be at least 8 characters long'
|
||||
}).max(255)
|
||||
});
|
||||
|
||||
export const registerAccountSchema = z.object({
|
||||
username: z.string().min(3, {
|
||||
message: 'Username must be at least 3 characters long'
|
||||
}).max(255),
|
||||
username: z.string()
|
||||
.min(3, { message: 'Name must be at least 3 characters long' })
|
||||
.max(255, { message: 'Name must be at most 255 characters long' })
|
||||
.regex(/^[A-Za-z][A-Za-z0-9_-]*$/, { message: 'Name must start with a letter and can only contain letters, numbers, underscores, or dashes' }),
|
||||
password: z.string().min(8, {
|
||||
message: 'Password must be at least 8 characters long'
|
||||
}).max(255)
|
||||
});
|
||||
|
||||
export const ZCharacterCreate = z.object({
|
||||
name: z.string().min(3, {
|
||||
message: 'Name must be at least 3 characters long'
|
||||
}).max(255)
|
||||
});
|
||||
|
||||
export const ZCharacterDelete = z.object({
|
||||
character_id: z.number()
|
||||
name: z.string()
|
||||
.min(3, { message: 'Name must be at least 3 characters long' })
|
||||
.max(255, { message: 'Name must be at most 255 characters long' })
|
||||
.regex(/^[A-Za-z][A-Za-z0-9_-]*$/, { message: 'Name must start with a letter and can only contain letters, numbers, underscores, or dashes' })
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user