feat(api): add user search endpoint and normalize response data and validation

This commit is contained in:
Dominik 2025-06-17 21:46:38 +02:00 committed by Micha
parent b5dfe9a4e3
commit 8207230886
4 changed files with 40 additions and 7 deletions

View file

@ -21,6 +21,29 @@
}
}
},
"ZodErrorResponse": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"default": false
},
"message": {
"type": "string",
"description": "Error message"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": { "type": "string" },
"message": { "type": "string" }
}
}
}
}
},
"User": {
"type": "object",
"properties": {
@ -30,7 +53,9 @@
"last_name": { "type": "string" },
"email": { "type": "string", "format": "email" },
"image": { "type": "string", "format": "uri" },
"timezone": { "type": "string", "description": "User timezone" }
"timezone": { "type": "string", "description": "User timezone" },
"created_at": { "type": "string", "format": "date-time" },
"updated_at": { "type": "string", "format": "date-time" }
}
},
"PublicUser": {
@ -76,9 +101,17 @@
"participants": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Participant"
"type": "object",
"properties": {
"user": {
"$ref": "#/components/schemas/SimpleUser"
},
"status": { "type": "string" }
}
}
},
"created_at": { "type": "string", "format": "date-time" },
"updated_at": { "type": "string", "format": "date-time" }
}
}
}

View file

@ -37,7 +37,7 @@ const providers: Provider[] = [
if (process.env.DISABLE_PASSWORD_LOGIN) return null;
try {
const { email, password } = await loginSchema.parseAsync(c);
const { email, password } = await loginClientSchema.parseAsync(c);
const user = await prisma.user.findFirst({
where: { OR: [{ email }, { name: email }] },

View file

@ -18,7 +18,7 @@ function LoginFormElement({
formRef?: React.RefObject<HTMLFormElement | null>;
}) {
const { handleSubmit, formState, register, setError } =
useZodForm(loginSchema);
useZodForm(loginClientSchema);
const router = useRouter();
const onSubmit = handleSubmit(async (data) => {
@ -95,7 +95,7 @@ function RegisterFormElement({
formRef?: React.RefObject<HTMLFormElement | null>;
}) {
const { handleSubmit, formState, register, setError } =
useZodForm(registerSchema);
useZodForm(registerClientSchema);
const onSubmit = handleSubmit(async (data) => {
try {

View file

@ -4,7 +4,7 @@ import { z } from 'zod/v4';
import { loginSchema } from './validation';
import { signIn } from '@/auth';
export async function loginAction(data: z.infer<typeof loginSchema>) {
export async function loginAction(data: z.infer<typeof loginClientSchema>) {
try {
await signIn('credentials', {
...data,