38 lines
1.1 KiB
TypeScript

import { createAction, createAsyncThunk } from '@reduxjs/toolkit';
import { LoginRequest, LoginResponse, LogoutRequest, LogoutResponse } from '@interfaces';
import { loginApi, logoutApi } from '@api';
export const login = createAsyncThunk<LoginResponse, LoginRequest>(
'auth/login',
async (payload, { rejectWithValue }) => {
try {
return await loginApi(payload);
} catch (error: any) {
const serverMessage =
error?.response?.data?.message ||
error.message ||
'Failed to login';
return rejectWithValue(serverMessage);
}
},
);
export const clearLocalAuth = createAction('USER_LOGOUT');
export const logout = createAsyncThunk<LogoutResponse, LogoutRequest>(
'auth/logout',
async (payload, { dispatch, rejectWithValue }) => {
try {
const response = await logoutApi(payload);
dispatch(clearLocalAuth());
return response;
} catch (error: any) {
const serverMessage =
error?.response?.data?.message ||
error.message ||
'Failed to logout';
return rejectWithValue(serverMessage);
}
},
);