designtopack/src/stores/api.js

181 lines
4.8 KiB
JavaScript
Raw Normal View History

2024-07-10 18:43:46 +02:00
import { defineStore } from "pinia";
2024-10-28 17:50:40 +01:00
import uniqid from "uniqid";
2024-07-10 18:43:46 +02:00
2024-09-10 08:49:09 +02:00
export const useApiStore = defineStore("api", () => {
2024-09-04 11:28:12 +02:00
/**
* Asynchronously fetches JSON data corresponding to a given path.
*
* @param {string} [path=window.location.pathname] - The path for which to fetch data.
* - If no path is provided, the function will use the current page's path.
* - If the path is "/", it is assumed to be the homepage, and "home.json" is fetched.
* - For other paths, the function will append ".json" to the path and fetch that URL.
*
* @returns {Promise<Object>} A promise that resolves to the JSON data if the fetch is successful.
*
* @throws {Error} Will throw an error if the HTTP request fails (e.g., non-200 status code).
* - The error will include the HTTP status code and a message indicating the fetch failed.
*
* @example
* // Fetch data for the current page
2024-10-28 15:33:52 +01:00
* fetchData().then(data => {
2024-09-04 11:28:12 +02:00
* console.log(data);
* }).catch(error => {
* console.error('Error fetching data:', error);
* });
*
* @example
* // Fetch data for a specific path
2024-10-28 15:33:52 +01:00
* fetchData('/about').then(data => {
2024-09-04 11:28:12 +02:00
* console.log(data);
* }).catch(error => {
* console.error('Error fetching data:', error);
* });
*/
2024-10-28 15:33:52 +01:00
async function fetchData(path = window.location.pathname) {
2024-09-04 11:28:12 +02:00
const isHomePage = path === "/";
2024-09-11 06:09:34 +02:00
path = path === "/" ? "/home" : path;
2024-09-10 08:13:20 +02:00
path = path.startsWith("/") ? path : "/" + path;
2024-09-11 06:09:34 +02:00
path = path.endsWith("/") ? path.substring(0, path.length - 1) : path;
2024-09-10 08:13:20 +02:00
const url = `${window.location.origin}${path}.json`;
2024-07-11 12:42:29 +02:00
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
2024-09-04 11:28:12 +02:00
console.log("Données récupérées du chemin " + path, data);
2024-07-11 12:42:29 +02:00
return data;
} catch (error) {
console.error(
2024-09-04 11:28:12 +02:00
"Une erreur s'est produite lors de la récupération des données pour l'URL :",
url,
2024-07-11 12:42:29 +02:00
error
);
throw error;
}
}
function fetchDataThroughKQL() {
2024-07-10 18:43:46 +02:00
const api = "/api/query";
const username = import.meta.env.VITE_USERNAME;
const password = import.meta.env.VITE_PASSWORD;
const token = btoa(`${username}:${password}`);
const headers = {
Authorization: `Basic ${token}`,
};
const request = {
method: "post",
body: JSON.stringify({
query: `page('home')`,
select: {
testImages: {
query: "page.testImages.toFiles",
select: {
url: true,
},
},
blocks: {
query: "page.testBlocks.toBlocks",
},
},
}),
headers,
};
fetch(api, request)
.then((response) => response.json())
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
});
}
2024-09-11 07:32:34 +02:00
async function fetchRoute(path, method, data) {
const config = {
method: method,
};
if (data) {
config.body = JSON.stringify(data);
}
try {
const response = await fetch(path, config);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
console.log("La route " + path + " a fonctionné.");
return data;
} catch (error) {
console.error("La route " + path + " n'a pas fonctionné.", error);
throw error;
}
}
2024-10-28 17:50:40 +01:00
async function addComment(comment) {
const headers = {
method: "POST",
body: JSON.stringify(comment),
};
try {
const response = await fetch("/add-comment.json", headers);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const newFile = await response.json();
return newFile;
} catch (error) {
console.error(
"Une erreur s'est produite lors de l'ajout du commentaire :",
commentaire,
error
);
throw error;
}
}
async function readNotification(userUuid, group, notificationId) {
const headers = {
method: "POST",
body: JSON.stringify({
userUuid,
notificationId,
group,
}),
};
try {
const response = await fetch("/read-notification.json", headers);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const newNotifications = await response.json();
return newNotifications;
} catch (error) {
console.error(
"Une erreur s'est produite lors de la lecture de la notification n°",
notificationId,
error
);
throw error;
}
}
return {
fetchDataThroughKQL,
fetchData,
fetchRoute,
addComment,
readNotification,
};
2024-07-10 18:43:46 +02:00
});