Skip to content
Snippets Groups Projects
Commit 8954e0b8 authored by LAFORÊT Nicolas's avatar LAFORÊT Nicolas :rabbit2:
Browse files

:sparkles: cart validation

parent e7048925
Branches
1 merge request!7🔀 V1
......@@ -22,6 +22,7 @@ export async function getItems(): Promise<Product[]> {
// Format products data
const products = stocks.map(stock => new Product({
id: stock.item.id,
name: stock.item.name,
category: stock.item.category.name,
price: stock.item.price,
......@@ -29,24 +30,25 @@ export async function getItems(): Promise<Product[]> {
stock: stock.quantity
}));
// console.table(products);
return products;
}
export async function setStock(name: number, stock: number): Promise<void> {
export async function updateStock(itemId: number, stock: number): Promise<boolean> {
const response = await axios.put(`${BASE_URL}/stock`, {
item_id: name,
item_id: itemId,
quantity: stock
}, {
headers: {
'Content-Type': 'application/json',
'apikey': APIKEY,
}
})
.then(({ data }) => data)
.catch(error => {
console.error(error);
return "Error";
});
}).then(({ status }) => status === 200)
.catch(error => {
console.error(error);
return false;
});
return response;
};
......
......@@ -5,7 +5,7 @@ const BASE_URL = "https://" + process.env.REACT_APP_MONEY_URL;
// Fetch transactions from API
export async function getTransactions(studentNumber: string): Promise<any> {
// Fetch transactions data
const transactionsData: any[] = await axios.get(`${BASE_URL}/api/etudiants`, {
const transactionsData: any[] = await axios.get(`${BASE_URL}/transactions/get/${studentNumber}`, {
headers: {
'Content-Type': 'application/json',
}
......@@ -19,4 +19,26 @@ export async function getTransactions(studentNumber: string): Promise<any> {
// TODO: Format transaction data
return transactionsData;
}
\ No newline at end of file
}
export async function sendTransaction(studentNumber: string, userName: string, price: number): Promise<boolean> {
return await axios.post(`${BASE_URL}/payments/add/mastercard`, {
student_number: parseInt(studentNumber),
user_name: userName,
payment_method: "TODO",
payment_name: "mastercard",
identifier: "123454678",
amount: price,
}, {
headers: {
'Content-Type': 'application/json',
}
}).then((res) => {
console.log(res);
return res.status === 200;
})
.catch(error => {
console.error(error);
return false;
});
}
......@@ -48,22 +48,21 @@ export async function getUsers(): Promise<User[]> {
return users;
};
export async function setAdhesion() : Promise<number> {
// Fetch users data
await axios.post(`${BASE_URL}/api/pay_adhesion`, {
export async function setAdhesion(studentNumber: string) : Promise<boolean> {
// Set adhesion for given user
const success = await axios.post(`${BASE_URL}/api/pay_adhesion`, {
'student_number': studentNumber ?? '12345678'
}, {
headers: {
'Content-Type': 'application/json',
},
body: {
'student_number': '12345678',
}
}).then(({ data }) => data)
.catch(error => {
console.error(error);
return 0;
});
}).then(({ status }) => status === 200)
.catch(error => {
console.error(error);
return false;
});
return 1;
return success;
}
function validateSubscriptionDate(dateStr: string): boolean {
......
import { Dispatch } from "react";
export class Product {
public id: number;
public name: string;
public category: string;
public price: number;
......
......@@ -6,7 +6,9 @@ import { XIcon } from '@heroicons/react/outline'
import { cartContext } from '../../cart/CartStore';
import { updateProductQuantity } from '../../cart/CartActions';
import {setAdhesion} from '../../apis/student';
import { setAdhesion } from '../../apis/student';
import { sendTransaction } from '../../apis/money';
import { updateStock } from '../../apis/back';
const Cart = () => {
const { cartState, dispatch } = useContext(cartContext);
......@@ -16,27 +18,36 @@ const Cart = () => {
return `${price.toFixed(2).replace(".", ",")} €`;
}
function doValidate(): number {
const existingProduct = cartState.cart.find(p => p.name === "Adhésion");
if (existingProduct){
setAdhesion().then((users) => {
console.log("Envoi adhésion à STUDENT: 12345678");
}).catch((_) => {
console.log("error adhesion");
});
async function doValidate() {
const studentNumber: string = "12345678";
const userName: string = "UserName";
// Validate transaction with Money
const successTransaction = await sendTransaction(studentNumber, userName, cartState.totalPrice);
if (!successTransaction) {
console.error("Error during transaction with Money.");
return;
}
cartState.totalPrice = 0;
cartState.cart.forEach((product) => {
if (product.quantity) {
cartState.totalPrice += product.price * product.quantity;
// Set adhesion in Student
const adhesionInCart = cartState.cart.find(p => p.name === "Adhésion");
if (adhesionInCart !== undefined){
const adhesionSuccess = await setAdhesion(studentNumber);
if (!adhesionSuccess) {
console.error("Error during adhesion with Student.");
}
}
// Update stock in Back
cartState.cart.forEach(product => {
updateStock(product.id, -(product?.quantity ?? 1));
});
console.log("Envoi transaction à MONEY: ", cartState);
return 1;
// Reset cart
dispatch({ type: 'SET_CART', payload: [] });
}
let [totalPrice, setTotalPrice] = useState(0);
useEffect(() => {
// Update cart totalPrice
let totalPrice = 0;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment