import axios from "axios"; import FormData from "form-data"; import { useAuthStore } from "@/store/authStore"; const API_URL = "https://hopp.zikor.pl/api/v1"; export async function listNotices() { const { token } = useAuthStore.getState(); const headers = token ? { Authorization: `Bearer ${token}` } : {}; const response = await fetch(`${API_URL}/notices/get/all`, { headers: headers, }); const data = await response.json(); if (!response.ok) { throw new Error(response.toString()); } // console.info("Notices fetched successfully:", data); return data; } export async function getNoticeById(noticeId) { const response = await fetch(`${API_URL}/notices/get/${noticeId}`); const data = await response.json(); if (!response.ok) { throw new Error("Error"); } return data; } export async function createNotice(notice) { const { token } = useAuthStore.getState(); const headers = token ? { Authorization: `Bearer ${token}` } : {}; try { const response = await axios.post(`${API_URL}/notices/add`, notice, { headers: headers, }); if (response.data.noticeId !== null) { for (const image of notice.image) { console.log("image", image); if(notice.image.indexOf(image) === 0) { console.log("Image is first:", image); await uploadImage(response.data.noticeId, image, true); } console.log("image", image); await uploadImage(response.data.noticeId, image, false); } } return response.data; } catch (error) { console.log("Error", error.response.data, error.response.status); return null; } } export async function getImageByNoticeId(noticeId) { let imageUrl; try { const listResponse = await axios.get(`${API_URL}/images/list/${noticeId}`); const imageName = listResponse.data[0]; imageUrl = `${API_URL}/images/get/${imageName}`; return imageUrl; } catch (err) { console.log(`Zdjęcie nie istnieje dla notice o id: ${noticeId}`); imageUrl = "https://http.cat/404.jpg"; return imageUrl; } } export async function getAllImagesByNoticeId(noticeId) { const { token } = useAuthStore.getState(); const headers = token ? { Authorization: `Bearer ${token}` } : {}; try { const listResponse = await axios.get(`${API_URL}/images/list/${noticeId}`, {headers: headers}); if (listResponse.data && listResponse.data.length > 0) { return listResponse.data.map((imageName) => ({ uri: `${API_URL}/images/get/${imageName}`, headers: headers, })); } return [{ uri: "https://http.cat/404.jpg" }]; } catch (err) { if (err.response.status === 404) { // console.info(`Ogłoszenie o id: ${noticeId} nie posiada zdjęć.`); return [{ uri: "https://http.cat/404.jpg" }]; } console.warn( `Nie udało się pobrać listy zdjęć dla ogłoszenia o id: ${noticeId}`, err ); return [{ uri: "https://http.cat/404.jpg" }]; } } export const uploadImage = async (noticeId, imageObj, isFirst) => { const { token } = useAuthStore.getState(); const headers = { ...(token ? { Authorization: `Bearer ${token}` } : {}), 'Content-Type': 'multipart/form-data' }; const formData = new FormData(); const filename = imageObj.split("/").pop(); const match = /\.(\w+)$/.exec(filename); const type = match ? `image/${match[1]}` : "image/jpeg"; formData.append("file", { uri: imageObj, name: filename, type: type, }); try { const response = await axios.post( `${API_URL}/images/upload/${noticeId}?isMainImage=${isFirst}`, formData, { headers: headers, } ); console.info("Upload successful:", response.data); return response.data; } catch (error) { console.log("imageURI:", imageObj); console.error( "Error uploading image:", error.response.data, error.response.status ); throw error; } }; export const deleteNotice = async (noticeId) => { const { token } = useAuthStore.getState(); const headers = token ? { Authorization: `Bearer ${token}` } : {}; try { const response = await axios.delete( `${API_URL}/notices/delete/${noticeId}`, { headers: headers } ); return response.data; } catch (error) { console.error( "Error deleting notice:", error.response?.data, error.response?.status ); throw error; } };