Untitled
unknown
plain_text
a year ago
2.1 kB
13
Indexable
import { cookies } from "next/headers";
const myCookie = cookies()
.getAll()
.map(c => c.name + "=" + c.value)
.join("; ");
type Endpoints = "getAllRooms" | "getAvailableRooms" | "getTemporaryHold";
interface FetchDataResponse {
getAllRooms?: any;
getAvailableRooms?: any;
getTemporaryHold?: any;
}
const endpoints: Record<Endpoints, { url: string }> = {
getAllRooms: {
url: `${process.env.NEXT_PUBLIC_SERVER_URL}/room/all?paginate=false`
},
getAvailableRooms: {
url: `${process.env.NEXT_PUBLIC_SERVER_URL}/rooms?paginate=false&startDate=${new Date(
new Date(new Date()).setUTCHours(0, 0, 0, 0)
).toISOString()}`
},
getTemporaryHold: {
url: `${process.env.NEXT_PUBLIC_SERVER_URL}/booking/temp/hold?date=2024-07-08T00:00:00.000Z&from=server`
}
};
const fetchDataBooking = async (fetchSpecific: Endpoints[] = []): Promise<FetchDataResponse> => {
try {
const keysToFetch = fetchSpecific.length > 0 ? fetchSpecific : (Object.keys(endpoints) as Endpoints[]);
const fetchPromises = keysToFetch.map(key =>
fetch(endpoints[key].url, {
method: "GET",
credentials: "include",
headers: {
"Content-Type": "application/json",
Cookie: myCookie
},
cache: "no-store"
})
);
const responses = await Promise.all(fetchPromises);
responses.forEach(response => {
if (!response.ok) {
throw new Error(`Failed to fetch data from ${response.url}: ${response.statusText}`);
}
});
const jsonData = await Promise.all(responses.map(response => response.json()));
const fetchedData: FetchDataResponse = keysToFetch.reduce((acc, key, index) => {
acc[key] = jsonData[index];
return acc;
}, {} as FetchDataResponse);
return fetchedData;
} catch (error) {
console.error("Error fetching data:", error);
return {
getAllRooms: [],
getAvailableRooms: [],
getTemporaryHold: []
};
}
};
export default fetchDataBooking;
Editor is loading...
Leave a Comment