35 lines
852 B
TypeScript
35 lines
852 B
TypeScript
|
import { z } from "zod/v4-mini";
|
||
|
import { readUsers } from "~/server/database";
|
||
|
import { serverUserToApiDetails } from "~/server/utils/user";
|
||
|
|
||
|
const integerStringSchema = z.pipe(
|
||
|
z.string().check(z.regex(/^\d+/)),
|
||
|
z.transform(Number)
|
||
|
);
|
||
|
|
||
|
const detailsSchema = z.object({
|
||
|
id: integerStringSchema,
|
||
|
});
|
||
|
|
||
|
export default defineEventHandler(async (event) => {
|
||
|
await requireServerSessionWithAdmin(event);
|
||
|
const users = await readUsers();
|
||
|
const { success, error, data: params } = detailsSchema.safeParse(getRouterParams(event));
|
||
|
if (!success) {
|
||
|
throw createError({
|
||
|
status: 400,
|
||
|
statusText: "Bad Request",
|
||
|
message: z.prettifyError(error),
|
||
|
});
|
||
|
}
|
||
|
const user = users.find(user => user.id === params.id);
|
||
|
if (!user) {
|
||
|
throw createError({
|
||
|
statusCode: 404,
|
||
|
statusMessage: "Not found",
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return serverUserToApiDetails(user);
|
||
|
})
|