refactor: validate user state with zod

This commit is contained in:
MythEclipse
2026-05-14 23:11:25 +07:00
parent 5010a4d1f1
commit 954faf6c5a
2 changed files with 48 additions and 29 deletions
+13 -29
View File
@@ -1,38 +1,22 @@
import { plainToClass } from "class-transformer";
import { IsBoolean, IsString, validate } from "class-validator";
import { z } from "zod";
export class UserStateUpdate {
@IsString()
userId!: string;
const userStateUpdateSchema = z.object({
userId: z.string(),
username: z.string(),
avatar: z.string(),
speaking: z.boolean(),
});
@IsString()
username!: string;
export type UserStateUpdate = z.infer<typeof userStateUpdateSchema>;
@IsString()
avatar!: string;
@IsBoolean()
speaking!: boolean;
}
export class AudioMessage {
data!: Buffer;
userId!: string;
export interface AudioMessage {
data: Buffer;
userId: string;
}
export async function validateUserStateUpdate(
data: unknown,
): Promise<UserStateUpdate | null> {
if (typeof data !== "object" || data === null) {
return null;
}
const obj = plainToClass(UserStateUpdate, data);
const errors = await validate(obj);
if (errors.length > 0) {
return null;
}
return obj;
const result = userStateUpdateSchema.safeParse(data);
return result.success ? result.data : null;
}