75 lines
1.8 KiB
TypeScript
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',
|
|
);
|
|
}
|
|
});
|