From 7755384d515b25942528d0ce97d8d9df7a9b7f23 Mon Sep 17 00:00:00 2001 From: AmirReza Jamali Date: Tue, 10 Feb 2026 16:49:19 +0330 Subject: [PATCH] fix(auth): enhance user login response handling and update User schema - Log the response data on successful login for debugging purposes - Improve error handling in user service by using safeParse for login response validation - Update User schema to allow null values for optional fields, enhancing flexibility in user data handling --- src/hooks/queries/useUsersQueries.ts | 3 ++- src/lib/api/services/user-services.ts | 6 +++++- src/lib/api/types/User.ts | 28 +++++++++++++-------------- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/hooks/queries/useUsersQueries.ts b/src/hooks/queries/useUsersQueries.ts index 3618031..7ad5b2e 100644 --- a/src/hooks/queries/useUsersQueries.ts +++ b/src/hooks/queries/useUsersQueries.ts @@ -19,7 +19,8 @@ export const useLoginQuery = (callback?: () => void) => { mutationFn: userService.login, onSuccess: (response) => { setAuthState(response.data); - router.replace("/charts"); + console.log(response); + if (callback) { callback(); } diff --git a/src/lib/api/services/user-services.ts b/src/lib/api/services/user-services.ts index e59cf47..99d1547 100644 --- a/src/lib/api/services/user-services.ts +++ b/src/lib/api/services/user-services.ts @@ -19,7 +19,11 @@ export const userService = { try { const response = await api.post(API_ENDPOINTS.USER.LOGIN, credentials); - return LoginResponseSchema.parse(response.data); + const result = LoginResponseSchema.safeParse(response.data); + if (!result.success) { + throw new Error(result.error.message); + } + return result.data; } catch (error) { console.error("ERROR caught in User Service Login:", error); throw error; diff --git a/src/lib/api/types/User.ts b/src/lib/api/types/User.ts index 82d27bb..fc8953c 100644 --- a/src/lib/api/types/User.ts +++ b/src/lib/api/types/User.ts @@ -5,21 +5,21 @@ export const UserSchema = z.object({ id: z.string().regex(/^[0-9a-fA-F]{24}$/, { message: "Invalid ObjectId", }), - full_name: z.string(), - username: z.string().optional(), - email: z.string().email().optional(), - role: z.string().optional(), - status: z.string().optional(), - company_id: z.string().optional(), - department: z.string().optional(), - position: z.string().optional(), - phone: z.string().optional(), + full_name: z.string().optional().or(z.null()), + username: z.string().optional().or(z.null()), + email: z.string().email().optional().or(z.null()), + role: z.string().optional().or(z.null()), + status: z.string().optional().or(z.null()), + company_id: z.string().optional().or(z.null()), + department: z.string().optional().or(z.null()), + position: z.string().optional().or(z.null()), + phone: z.string().optional().or(z.null()), profile_image: z.string().or(z.null()).optional(), - is_verified: z.boolean().optional(), - last_login_at: z.number().or(z.null()).optional(), - created_at: z.number().optional(), - updated_at: z.number().optional(), - updated_by: z.string().optional(), + is_verified: z.boolean().optional().or(z.null()), + last_login_at: z.number().or(z.null()).optional().or(z.null()), + created_at: z.number().optional().or(z.null()), + updated_at: z.number().optional().or(z.null()), + updated_by: z.string().optional().or(z.null()), }); export const CreateAdminSchema = z.object({