75 lines
1.8 KiB
TypeScript

import {
OrderRequest,
PaymentMethodsResponse,
PlaceOrderResponse,
Order,
} from '@interfaces';
import { createAsyncThunk } from '@reduxjs/toolkit';
import {
getAllPaymentMethodsApi,
getOrderByIdApi,
getOrderHistoryApi,
placeOrderApi,
} from '@api';
export const getAllPaymentMethodsThunk = createAsyncThunk<
PaymentMethodsResponse,
void,
{ rejectValue: string }
>('paymentMethods/getAll', async (_, { rejectWithValue }) => {
try {
const response = await getAllPaymentMethodsApi();
// console.log(response.data);
return response;
} catch (error: any) {
return rejectWithValue(
error.response?.data?.error || 'Failed to get payment methods',
);
}
});
export const placeOrderThunk = createAsyncThunk<
PlaceOrderResponse,
OrderRequest,
{ rejectValue: string }
>('orders/placeOrder', async (payload: OrderRequest, { rejectWithValue }) => {
try {
const response = await placeOrderApi(payload);
return response;
} catch (error: any) {
return rejectWithValue(
error.response?.data?.error || 'Failed to place order',
);
}
});
export const getOrderHistoryThunk = createAsyncThunk<
Order[],
void,
{ rejectValue: string }
>('orders/getOrderHistory', async (_, { rejectWithValue }) => {
try {
const response = await getOrderHistoryApi();
return response;
} catch (error: any) {
return rejectWithValue(
error.response?.data?.error || 'Failed to get order history',
);
}
});
export const getOrderByIdThunk = createAsyncThunk<
Order,
string,
{ rejectValue: string }
>('orders/getOrderById', async (orderId: string, { rejectWithValue }) => {
try {
const response = await getOrderByIdApi(orderId);
return response;
} catch (error: any) {
return rejectWithValue(
error.response?.data?.error || 'Failed to get order',
);
}
});