next-enterprise/package/config/FetchData.tsx

44 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-09-19 19:22:43 -05:00
import { ReturnService } from "@package/config/ReturnService"
import i18n from "@package/utils/language/i18n"
const BASE_URL = process.env.NEXT_PUBLIC_API_URL
/**
* Fetches data from a specified endpoint and returns a `ReturnService` object.
*
* @template T - The type of the data expected from the API response.
* @param {string} BASE_URL_MODULE - The base URL module to be appended to the base URL.
* @param {string} endpoint - The specific API endpoint to fetch data from.
* @param {RequestInit} [options={}] - Optional configuration for the fetch request.
* @returns {Promise<ReturnService<T>>} A promise that resolves to a `ReturnService` object containing the fetched data.
*
* @throws {Error} If the fetch request fails or the response is not ok.
*/
2024-09-19 19:22:43 -05:00
async function FetchData<T>(
BASE_URL_MODULE: string,
endpoint: string,
options: RequestInit = {}
): Promise<ReturnService<T>> {
2024-09-19 19:22:43 -05:00
const url = `${BASE_URL}${BASE_URL_MODULE}${endpoint}`
const text = i18n.t("errorProcessingAPI") as string
try {
const response = await fetch(url, options)
if (response.status === 403) {
const text = i18n.t("inCorrectAccess") as string
return new ReturnService<T>(null as unknown as T, false, text, 1)
}
if (!response.ok) {
return new ReturnService<T>(null as unknown as T, false, text, 1)
}
const data = await response.json()
return new ReturnService<T>(data as T)
} catch (error: any) {
return new ReturnService<T>(null as unknown as T, false, text || error.message, error.errorCode || 1)
}
}
export { FetchData }