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),
+ }
+ )
);