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 {
|
2024-10-29 11:12:57 +01:00
|
|
|
const response = await fetch("/create-comment.json", headers);
|
2024-10-28 17:50:40 +01:00
|
|
|
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 :",
|
|
|
|
|
error
|
|
|
|
|
);
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-30 16:32:13 +01:00
|
|
|
async function deleteComment(comment) {
|
|
|
|
|
const headers = {
|
|
|
|
|
method: "POST",
|
|
|
|
|
body: JSON.stringify(comment),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const response = await fetch("/delete-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 la suppression du commentaire :",
|
|
|
|
|
comment,
|
|
|
|
|
error
|
|
|
|
|
);
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-29 16:51:31 +01:00
|
|
|
async function replyComment(comment) {
|
|
|
|
|
const headers = {
|
|
|
|
|
method: "POST",
|
|
|
|
|
body: JSON.stringify(comment),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const response = await fetch("/reply-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 de la réponse' :",
|
|
|
|
|
commentaire,
|
|
|
|
|
error
|
|
|
|
|
);
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-18 09:36:15 +01:00
|
|
|
async function readNotification(notificationId) {
|
2024-10-28 17:50:40 +01:00
|
|
|
const headers = {
|
|
|
|
|
method: "POST",
|
|
|
|
|
body: JSON.stringify({
|
|
|
|
|
notificationId,
|
|
|
|
|
}),
|
|
|
|
|
};
|
|
|
|
|
try {
|
2024-11-18 09:36:15 +01:00
|
|
|
const response = await fetch("/read-comment.json", headers);
|
2024-10-28 17:50:40 +01:00
|
|
|
if (!response.ok) {
|
|
|
|
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
|
|
|
}
|
2024-11-18 09:36:15 +01:00
|
|
|
const data = await response.json();
|
|
|
|
|
if (data.error) {
|
|
|
|
|
throw new Error(data);
|
|
|
|
|
} else {
|
|
|
|
|
return data;
|
|
|
|
|
}
|
2024-10-28 17:50:40 +01:00
|
|
|
} catch (error) {
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-21 19:43:49 +01:00
|
|
|
async function validateBrief(briefUri) {
|
|
|
|
|
const headers = {
|
|
|
|
|
method: "POST",
|
|
|
|
|
body: JSON.stringify({
|
|
|
|
|
pageUri: briefUri,
|
|
|
|
|
}),
|
|
|
|
|
};
|
|
|
|
|
try {
|
|
|
|
|
const response = await fetch("/validate-brief.json", headers);
|
|
|
|
|
if (!response.ok) {
|
|
|
|
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
|
|
|
}
|
|
|
|
|
const data = await response.json();
|
|
|
|
|
if (data.error) {
|
|
|
|
|
throw new Error(data);
|
|
|
|
|
} else {
|
|
|
|
|
return data;
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-18 13:45:40 +01:00
|
|
|
async function readAllNotifications() {
|
|
|
|
|
try {
|
|
|
|
|
const response = await fetch("/read-all-notifications.json");
|
|
|
|
|
if (!response.ok) {
|
|
|
|
|
console.log(response);
|
|
|
|
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
|
|
|
}
|
|
|
|
|
const data = await response.json();
|
|
|
|
|
if (data.error) {
|
|
|
|
|
throw new Error(data);
|
|
|
|
|
} else {
|
|
|
|
|
console.log("All notifications read.");
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-28 17:50:40 +01:00
|
|
|
return {
|
|
|
|
|
fetchDataThroughKQL,
|
|
|
|
|
fetchData,
|
|
|
|
|
fetchRoute,
|
|
|
|
|
addComment,
|
2024-10-30 16:32:13 +01:00
|
|
|
deleteComment,
|
2024-10-29 16:51:31 +01:00
|
|
|
replyComment,
|
2024-10-28 17:50:40 +01:00
|
|
|
readNotification,
|
2024-11-18 13:45:40 +01:00
|
|
|
readAllNotifications,
|
2024-11-21 19:43:49 +01:00
|
|
|
validateBrief,
|
2024-10-28 17:50:40 +01:00
|
|
|
};
|
2024-07-10 18:43:46 +02:00
|
|
|
});
|