From 27175ffa91f50b1a3f6b4a0b1d4018df006ea860 Mon Sep 17 00:00:00 2001 From: Patryk Date: Mon, 9 Jun 2025 20:59:43 +0200 Subject: [PATCH] some fixes --- ArtisanConnect/api/notices.jsx | 10 +- ArtisanConnect/api/order.jsx | 37 ++- ArtisanConnect/api/wishlist.jsx | 2 +- ArtisanConnect/app/(tabs)/_layout.jsx | 3 +- .../app/(tabs)/dashboard/userNotices.jsx | 105 +++---- ArtisanConnect/app/(tabs)/index.jsx | 3 - ArtisanConnect/store/authStore.jsx | 258 +++++++++--------- 7 files changed, 221 insertions(+), 197 deletions(-) diff --git a/ArtisanConnect/api/notices.jsx b/ArtisanConnect/api/notices.jsx index 222cdb8..29b6ee3 100644 --- a/ArtisanConnect/api/notices.jsx +++ b/ArtisanConnect/api/notices.jsx @@ -2,7 +2,7 @@ import axios from "axios"; import FormData from "form-data"; import { useAuthStore } from "@/store/authStore"; -// const API_URL = "https://testowe.zikor.pl/api/v1"; +// const API_URL = "https://hopp.zikor.pl/api/v1"; const API_URL = "https://hopp.zikor.pl/api/v1"; @@ -36,7 +36,9 @@ 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}); + const response = await axios.post(`${API_URL}/notices/add`, notice, { + headers: headers, + }); if (response.data.noticeId !== null) { for (const imageUri of notice.image) { @@ -71,7 +73,9 @@ 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}); + const listResponse = await axios.get(`${API_URL}/images/list/${noticeId}`, { + headers: headers, + }); if (listResponse.data && listResponse.data.length > 0) { return listResponse.data.map((imageName) => ({ diff --git a/ArtisanConnect/api/order.jsx b/ArtisanConnect/api/order.jsx index 2f6efe1..b8348a3 100644 --- a/ArtisanConnect/api/order.jsx +++ b/ArtisanConnect/api/order.jsx @@ -1,6 +1,4 @@ import axios from "axios"; -import FormData from "form-data"; - import { useAuthStore } from "@/store/authStore"; const API_URL = "https://hopp.zikor.pl/api/v1/orders"; @@ -9,17 +7,16 @@ export async function createOrder(noticeId, orderType) { const { token } = useAuthStore.getState(); const headers = token ? { Authorization: `Bearer ${token}` } : {}; const clientId = 1; + try { const response = await axios.post( `${API_URL}/add`, - { clientId, noticeId, orderType }, + { clientId: clientId, noticeId: noticeId, orderType: orderType }, { - headers: { - "Content-Type": "application/json", - ...headers, - }, + headers: headers, } ); + return response.data; } catch (error) { console.log("Error", error.response?.data, error.response?.status); @@ -33,13 +30,10 @@ export async function createPayment(orderId) { const clientId = 1; try { const response = await axios.post( - `${API_URL}/token`, + `${API_URL}/token?orderId=${orderId}`, {}, { - headers: { - "Content-Type": "application/json", - ...headers, - }, + headers: headers, } ); return response.data; @@ -49,13 +43,30 @@ export async function createPayment(orderId) { } } +export async function getOrder(orderId) { + const { token } = useAuthStore.getState(); + const headers = token ? { Authorization: `Bearer ${token}` } : {}; + + try { + const response = await axios.get(`${API_URL}/get/${orderId}`, { headers }); + return response.data; + } catch (error) { + console.error( + "Error fetching order:", + error.response?.data, + error.response?.status + ); + throw error; + } +} + export async function listOrders() { const { token } = useAuthStore.getState(); const headers = token ? { Authorization: `Bearer ${token}` } : {}; try { const response = await axios.get(`${API_URL}/get/all`, { headers }); - return response.data; // to będzie tablica OrderWithPaymentsDTO + return response.data; } catch (error) { console.error( "Error fetching orders:", diff --git a/ArtisanConnect/api/wishlist.jsx b/ArtisanConnect/api/wishlist.jsx index 279c319..b54a30a 100644 --- a/ArtisanConnect/api/wishlist.jsx +++ b/ArtisanConnect/api/wishlist.jsx @@ -35,4 +35,4 @@ export async function getWishlist() { throw error; } } -`` \ No newline at end of file +``; diff --git a/ArtisanConnect/app/(tabs)/_layout.jsx b/ArtisanConnect/app/(tabs)/_layout.jsx index 4a42cf7..b4c55c3 100644 --- a/ArtisanConnect/app/(tabs)/_layout.jsx +++ b/ArtisanConnect/app/(tabs)/_layout.jsx @@ -3,11 +3,12 @@ import { Ionicons } from "@expo/vector-icons"; import { useAuthStore } from "@/store/authStore"; export default function TabLayout() { - const token = useAuthStore((state) => state.token); + const { token } = useAuthStore.getState(); if (!token) { return ; } + return ( { if (!isRedirecting) return; const subscription = AppState.addEventListener("change", (state) => { if (state === "active") { - setIsRedirecting(false); - const paymentStatus = "CORRECT"; - if (paymentStatus === "INCORRECT") { - showNewToast("Płatność została anulowana."); - } else if (paymentStatus === "CORRECT") { - showNewToast("Płatność została zrealizowana."); - } else { - showNewToast("Płatność jeszcze nie wpłynęła."); - } + (async () => { + const lastOrder = await getOrder(orderId); + const lastPayments = lastOrder.payments; + const paymentStatus = + lastPayments.length > 0 + ? lastPayments[lastPayments.length - 1].status + : null; + setIsRedirecting(false); + if (paymentStatus === "INCORRECT") { + showNewToast("Płatność została anulowana."); + } else if (paymentStatus === "CORRECT") { + showNewToast("Płatność została zrealizowana."); + } else { + showNewToast("Płatność jeszcze nie wpłynęła."); + } + })(); } - appState.current = state; }); return () => subscription.remove(); - }, [isRedirecting, toast]); + }, [isRedirecting, toast, orderId]); useEffect(() => { const loadNotices = async () => { @@ -81,23 +88,23 @@ export default function UserNotices() { try { const result = await createOrder(noticeId, type); if (result) { + setOrderId(result); try { - const paymentResult = await createPayment(); //trzeba dodać orderId + const paymentResult = await createPayment(result); if (paymentResult) { setIsRedirecting(true); await Linking.openURL(paymentResult); - setWaitingForPayment(true); } else { - console.log(`Nie udało się aktywować ogłoszenia ${noticeId}.`); + console.log(`Nie udało się aktywować ogłoszenia 4 ${noticeId}.`); } } catch (err) { - console.log("Błąd podczas aktywacji ogłoszenia:", err); + // console.log("Błąd podczas aktywacji ogłoszenia 3:", err); } } else { - console.log(`Nie udało się aktywować ogłoszenia ${noticeId}.`); + // console.log(`Nie udało się aktywować ogłoszenia 2 ${noticeId}.`); } } catch (err) { - console.log("Błąd podczas aktywacji ogłoszenia:", err); + console.log("Błąd podczas aktywacji ogłoszenia 1:", err); } } }; @@ -116,9 +123,9 @@ export default function UserNotices() { if (isLoading) { return ( - - - + + + ); } @@ -141,38 +148,42 @@ export default function UserNotices() { {item.status === "ACTIVE" ? ( - + ) : ( - + )} diff --git a/ArtisanConnect/app/(tabs)/index.jsx b/ArtisanConnect/app/(tabs)/index.jsx index 23df1b5..b9b3099 100644 --- a/ArtisanConnect/app/(tabs)/index.jsx +++ b/ArtisanConnect/app/(tabs)/index.jsx @@ -32,11 +32,8 @@ export default function Home() { }, [token, fetchNotices]); const notices = useNoticesStore((state) => state.notices); - // console.log("Notices:", notices); - // console.log("Notices length:", notices.length); const activeNotices = notices.filter((notice) => notice.status === "ACTIVE"); - // console.log("Activer Notices:", activeNotices.length); const latestNotices = [...activeNotices] .sort((a, b) => new Date(b.publishDate) - new Date(a.publishDate)) .slice(0, 6); diff --git a/ArtisanConnect/store/authStore.jsx b/ArtisanConnect/store/authStore.jsx index d8d35f3..47d83dc 100644 --- a/ArtisanConnect/store/authStore.jsx +++ b/ArtisanConnect/store/authStore.jsx @@ -1,5 +1,5 @@ -import {create} from "zustand"; -import {createJSONStorage, persist} from "zustand/middleware"; +import { create } from "zustand"; +import { createJSONStorage, persist } from "zustand/middleware"; import AsyncStorage from "@react-native-async-storage/async-storage"; import axios from "axios"; @@ -8,135 +8,135 @@ const API_URL = "https://hopp.zikor.pl/api/v1"; let interceptorInitialized = false; export const useAuthStore = create( - persist( - (set, get) => { - if (!interceptorInitialized.current) { - axios.interceptors.response.use( - (response) => response, - (error) => { - if ( - (error.response && error.response.status === 401) || - error.response.status === 403 - ) { - set({user_id: null, token: null, isLoading: false}); - delete axios.defaults.headers.common["Authorization"]; - } - return Promise.reject(error); - } - ); - interceptorInitialized = true; - } - return { - user_id: null, - token: null, - isLoading: false, - error: null, + persist( + (set, get) => { + // if (!interceptorInitialized.current) { + // axios.interceptors.response.use( + // (response) => response, + // (error) => { + // if ( + // (error.response && error.response.status === 401) || + // error.response.status === 403 + // ) { + // set({ user_id: null, token: null, isLoading: false }); + // delete axios.defaults.headers.common["Authorization"]; + // } + // return Promise.reject(error); + // } + // ); + // interceptorInitialized = true; + // } + return { + user_id: null, + token: null, + isLoading: false, + error: null, - signIn: async (email, password) => { - set({isLoading: true, error: null}); - try { - const response = await axios.post(`${API_URL}/auth/login`, { - email, - password, - }); + signIn: async (email, password) => { + set({ isLoading: true, error: null }); + try { + const response = await axios.post(`${API_URL}/auth/login`, { + email, + password, + }); - const user_id = response.data.user_id; - const token = response.data.token; - set({user_id: user_id, token: token, isLoading: false}); + const user_id = response.data.user_id; + const token = response.data.token; + set({ user_id: user_id, token: token, isLoading: false }); - axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; - } catch (error) { - set({ - error: error.response?.data?.message || error.message, - isLoading: false, - }); - throw error; - } - }, - - signUp: async (userData) => { - set({isLoading: true, error: null}); - try { - const response = await axios.post( - `${API_URL}/auth/register`, - userData, - { - headers: {"Content-Type": "application/json"}, - } - ); - - const user_id = response.data.user_id; - const token = response.data.token; - set({user_id: user_id, token: token, isLoading: false}); - - axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; - } catch (error) { - set({ - error: error.response?.data?.message || error.message, - isLoading: false, - }); - throw error; - } - }, - - signInWithGoogle: async (googleToken) => { - set({isLoading: true, error: null}); - try { - const response = await axios.post( - `${API_URL}/auth/google`, - {googleToken: googleToken}, - { - headers: {"Content-Type": "application/json"}, - } - ); - const user_id = response.data.user_id; - const token = response.data.token; - set({user_id: user_id, token: token, isLoading: false}); - - axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; - } catch (error) { - set({ - error: error.response?.data?.message || error.message, - isLoading: false, - }); - throw error; - } - }, - - signOut: async () => { - try { - await axios.post(`${API_URL}/auth/logout`); - } catch (error) { - console.error("Logout error:", error); - } finally { - delete axios.defaults.headers.common["Authorization"]; - set({user_id: null, token: null}); - } - }, - - // checkAuth: async () => { - // const { token } = useAuthStore.getState(); - // if (!token) return null; - - // set({ isLoading: true }); - // try { - // axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; - - // const response = await axios.get(`${API_URL}/auth/me`); - - // set({ user_id: response.data, isLoading: false }); - // return response.data; - // } catch (error) { - // delete axios.defaults.headers.common["Authorization"]; - // set({ user_id: null, token: null, isLoading: false }); - // return null; - // } - // }, - }; + axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; + } catch (error) { + set({ + error: error.response?.data?.message || error.message, + isLoading: false, + }); + throw error; + } }, - { - name: "auth-storage", - storage: createJSONStorage(() => AsyncStorage), - } - ) + + signUp: async (userData) => { + set({ isLoading: true, error: null }); + try { + const response = await axios.post( + `${API_URL}/auth/register`, + userData, + { + headers: { "Content-Type": "application/json" }, + } + ); + + const user_id = response.data.user_id; + const token = response.data.token; + set({ user_id: user_id, token: token, isLoading: false }); + + axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; + } catch (error) { + set({ + error: error.response?.data?.message || error.message, + isLoading: false, + }); + throw error; + } + }, + + signInWithGoogle: async (googleToken) => { + set({ isLoading: true, error: null }); + try { + const response = await axios.post( + `${API_URL}/auth/google`, + { googleToken: googleToken }, + { + headers: { "Content-Type": "application/json" }, + } + ); + const user_id = response.data.user_id; + const token = response.data.token; + set({ user_id: user_id, token: token, isLoading: false }); + + axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; + } catch (error) { + set({ + error: error.response?.data?.message || error.message, + isLoading: false, + }); + throw error; + } + }, + + signOut: async () => { + try { + await axios.post(`${API_URL}/auth/logout`); + } catch (error) { + console.error("Logout error:", error); + } finally { + delete axios.defaults.headers.common["Authorization"]; + set({ user_id: null, token: null }); + } + }, + + // checkAuth: async () => { + // const { token } = useAuthStore.getState(); + // if (!token) return null; + + // set({ isLoading: true }); + // try { + // axios.defaults.headers.common["Authorization"] = `Bearer ${token}`; + + // const response = await axios.get(`${API_URL}/auth/me`); + + // set({ user_id: response.data, isLoading: false }); + // return response.data; + // } catch (error) { + // delete axios.defaults.headers.common["Authorization"]; + // set({ user_id: null, token: null, isLoading: false }); + // return null; + // } + // }, + }; + }, + { + name: "auth-storage", + storage: createJSONStorage(() => AsyncStorage), + } + ) );