51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
'use server';
|
|
import { safeFetchApi } from '@/lib';
|
|
import { loginResponseSchema, UserFormValue } from '../schemas/login';
|
|
|
|
|
|
|
|
|
|
type LoginActionSuccess = {
|
|
message: string;
|
|
user: {
|
|
email: string;
|
|
username: string;
|
|
id: number;
|
|
rol: Array<{ id: number; rol: string }>;
|
|
fullname: string;
|
|
};
|
|
tokens: {
|
|
access_token: string;
|
|
access_expire_in: number;
|
|
refresh_token: string;
|
|
refresh_expire_in: number;
|
|
};
|
|
}
|
|
|
|
type LoginActionError = {
|
|
type: 'API_ERROR' | 'VALIDATION_ERROR' | 'UNKNOWN_ERROR'; // **Asegúrate de que el tipo de `type` sea este aquí**
|
|
message: string;
|
|
details?: any;
|
|
};
|
|
|
|
// Si SignInAction también puede devolver null, asegúralo en su tipo de retorno
|
|
type LoginActionResult = LoginActionSuccess | LoginActionError | null;
|
|
|
|
export const SignInAction = async (payload: UserFormValue): Promise<LoginActionResult> => {
|
|
const [error, data] = await safeFetchApi(
|
|
loginResponseSchema,
|
|
'/auth/sign-in',
|
|
'POST',
|
|
payload,
|
|
);
|
|
if (error) {
|
|
return {
|
|
type: error.type as 'API_ERROR' | 'VALIDATION_ERROR' | 'UNKNOWN_ERROR',
|
|
message: error.message,
|
|
details: error.details
|
|
};
|
|
} else {
|
|
return data;
|
|
}
|
|
};
|