diff --git a/00-backend/datasource/database.sqlite b/00-backend/datasource/database.sqlite index 2e0e78e..ee07ab4 100644 Binary files a/00-backend/datasource/database.sqlite and b/00-backend/datasource/database.sqlite differ diff --git a/01-frontend/src/pages/Payment.tsx b/01-frontend/src/pages/Payment.tsx index 63673b4..65c15cf 100644 --- a/01-frontend/src/pages/Payment.tsx +++ b/01-frontend/src/pages/Payment.tsx @@ -15,17 +15,17 @@ import { TextField, Typography } from '@mui/material'; +import { useMutation, useQuery } from '@tanstack/react-query'; import { TFunction } from 'i18next'; -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { useTranslation } from "react-i18next"; import { useNavigate } from 'react-router-dom'; -import Item from '../components/Item'; -import { BasketItem, useBasket } from '../helper/BasketProvider'; -import { OrderStatusEnum, ShippingDetails, SubmitOrder } from '../components/Order'; -import { useAccount } from '../helper/AccountProvider'; -import { useQuery, useMutation } from '@tanstack/react-query'; -import { submitCustomer, submitOrder } from '../helper/query/Queries'; import { CustomerType } from '../components/Account'; +import Item from '../components/Item'; +import { OrderStatusEnum, SubmitOrder } from '../components/Order'; +import { useAccount } from '../helper/AccountProvider'; +import { BasketItem, useBasket } from '../helper/BasketProvider'; +import { fetchCustomer, submitCustomer, submitOrder } from '../helper/query/Queries'; function getDiscountedPrice(item: Item): number { return (item.price100 / 100 * (100-item.discount100)/100); @@ -70,26 +70,17 @@ export default function Payment() { const { basket, clearBasket } = useBasket(); const navigator = useNavigate(); const [activeStep, setActiveStep] = useState(0); - const [shippingDetails, setShippingDetails] = useState({ - firstName: '', - lastName: '', - telefon: '', + const [shippingDetails, setShippingDetails] = useState({ + id: 0, // This will be set by the backend or user data + name: '', + surname: '', address: '', - postalCode: '', - city: '', + zip: '', country: 'Deutschland', }); const [orderNumber, setOrderNumber] = useState(null); const steps = [t('reviewCart'), t('shippingDetails'), t('payment'), t('orderSummary')]; const { user } = useAccount(); - const customerData: CustomerType = { - id: 0, - name: shippingDetails.firstName, - surname: shippingDetails.lastName, - address: shippingDetails.address, - country: shippingDetails.country, - zip: shippingDetails.postalCode, - }; const submitOrderData: SubmitOrder = { id: 0, // This will be set by the backend @@ -104,8 +95,8 @@ export default function Payment() { }; const { refetch: refetchCustomer } = useQuery({ - queryKey: ["submitCustomer", customerData], - queryFn: () => submitCustomer(customerData), + queryKey: ["submitCustomer", shippingDetails], + queryFn: () => submitCustomer(shippingDetails), retry: 0, retryDelay: 1000, enabled: false, @@ -117,6 +108,28 @@ export default function Payment() { }; + const { refetch: customerData } = useQuery({ + queryKey: ['fetchCustomer', user?.customerId], + queryFn: () => fetchCustomer(user?.customerId || 0), // Funktion zum Abrufen der Kundendaten + enabled: false + }); + + useEffect(() => { + const fetchShippingDetails = async () => { + if (user) { + try { + const userShippingDetails = (await customerData()).data; + setShippingDetails(userShippingDetails || shippingDetails); + } catch (error) { + console.error("Fehler beim Laden der Kundendaten:", error); + } + } + }; + + fetchShippingDetails(); + }, [user, customerData, shippingDetails]); + + // Verwende useMutation statt useQuery für submitOrder const { mutateAsync: submitOrderMutation } = useMutation({ mutationFn: (orderData: SubmitOrder) => submitOrder(orderData), @@ -174,11 +187,10 @@ export default function Payment() { // Hilfsfunktion prüfen, ob alle Pflichtfelder ausgefüllt sind const isShippingDetailsValid = () => { return ( - shippingDetails.firstName.trim() !== '' && - shippingDetails.lastName.trim() !== '' && + shippingDetails.name.trim() !== '' && + shippingDetails.surname.trim() !== '' && shippingDetails.address.trim() !== '' && - shippingDetails.postalCode.trim() !== '' && - shippingDetails.city.trim() !== '' && + shippingDetails.zip.trim() !== '' && shippingDetails.country.trim() !== '' ); }; @@ -211,7 +223,7 @@ export default function Payment() { fullWidth label={t('firstName')} name="firstName" - value={shippingDetails.firstName} + value={shippingDetails.name} onChange={handleInputChange} required /> @@ -220,20 +232,11 @@ export default function Payment() { fullWidth label={t('lastName')} name="lastName" - value={shippingDetails.lastName} + value={shippingDetails.surname} onChange={handleInputChange} required /> - - - - {t('shippingDetails')}: - {shippingDetails.firstName} {shippingDetails.lastName}
+ {shippingDetails.name} {shippingDetails.surname}
{shippingDetails.address}
- {shippingDetails.postalCode} {shippingDetails.city}
- {shippingDetails.country} + {shippingDetails.zip} {shippingDetails.country}
{t('orderedItems')}: