This repository has been archived on 2025-07-07. You can view files and clone it, but cannot push or open issues or pull requests.
Files
eternos/frontend/style/lib/cartStorage.ts

191 lines
5.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Cookies from 'js-cookie';
export interface CartItem {
id: number;
title: string;
price: number;
quantity: number;
}
interface Cart {
cart_items: CartItem[];
}
// Save cart to cookies
export const saveCart = (cartItems: CartItem[]): void => {
const cart: Cart = {
cart_items: cartItems
};
const cartData = JSON.stringify(cart);
Cookies.set('cart', cartData, { expires: 7 });
};
// Get cart from cookies
export const getCart = (): CartItem[] => {
const cartData = Cookies.get('cart');
if (!cartData) return [];
const cart: Cart = JSON.parse(cartData);
return cart.cart_items;
};
// Clear cart in cookies
export const clearCart = (): void => {
Cookies.remove('cart');
};
/*
import Cookies from 'js-cookie';
import axios from 'axios';
export interface CartItem {
id: number;
title: string;
price: number;
quantity: number;
}
// Сохранить корзину в cookies
export const saveCart = (cartItems: CartItem[]): void => {
const cartData = JSON.stringify(cartItems);
Cookies.set('cart', cartData, { expires: 7 }); // Срок хранения cookies 7 дней
};
// Получить корзину из cookies
export const getCart = (): CartItem[] => {
const cartData = Cookies.get('cart');
return cartData ? JSON.parse(cartData) : []; // Возвращаем пустой массив, если корзина не найдена
};
// Очистить корзину в cookies
export const clearCart = (): void => {
Cookies.remove('cart'); // Удаляем cookies с данными корзины
};
// Отправить данные корзины на сервер
export const sendOrderToServer = async (userId: number): Promise<void> => {
try {
const cartItems = getCart(); // Получаем текущую корзину из cookies
if (cartItems.length === 0) {
console.warn('Корзина пуста, нечего отправлять');
return;
}
// Данные для отправки
const orderData = {
userId, // ID пользователя
items: cartItems, // Товары из корзины
orderDate: new Date().toISOString(), // Текущая дата
};
// Отправляем запрос на сервер
const response = await axios.post('/api/orders', orderData);
if (response.status === 200) {
console.log('Заказ успешно отправлен!');
clearCart(); // Очищаем корзину после успешного заказа
} else {
console.error('Ошибка при отправке заказа:', response.statusText);
}
} catch (error) {
console.error('Произошла ошибка при отправке заказа:', error);
}
};
// Херня для отправки на БД
// Вид БД должен быть таким:
// CREATE TABLE orders (
// id SERIAL PRIMARY KEY,
// user_id INT NOT NULL,
// order_date TIMESTAMP NOT NULL
// );
// CREATE TABLE order_items (
// id SERIAL PRIMARY KEY,
// order_id INT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
// product_id INT NOT NULL,
// title TEXT NOT NULL,
// price NUMERIC(10, 2) NOT NULL,
// quantity INT NOT NULL
// );
const express = require('express');
const { Pool } = require('pg');
const app = express();
const port = 3000;
// Настройка подключения к PostgreSQL
const pool = new Pool({
user: 'your_user', // Замените на пользователя PostgreSQL
host: 'localhost', // Хост базы данных
database: 'your_database', // Название базы данных
password: 'your_password', // Пароль пользователя PostgreSQL
port: 5432, // Порт PostgreSQL (по умолчанию 5432)
});
// Middleware для обработки JSON
app.use(express.json());
// Маршрут для обработки POST-запросов на '/api/orders'
app.post('/api/orders', async (req, res) => {
const { userId, items, orderDate } = req.body;
// Проверка данных
if (!userId || !items || items.length === 0) {
return res.status(400).json({ error: 'Invalid request. Missing userId or items.' });
}
const client = await pool.connect();
try {
// Начало транзакции
await client.query('BEGIN');
// Вставка заказа в таблицу orders
const orderResult = await client.query(
`INSERT INTO orders (user_id, order_date) VALUES ($1, $2) RETURNING id`,
[userId, orderDate || new Date()]
);
const orderId = orderResult.rows[0].id;
// Вставка позиций заказа в таблицу order_items
const insertItemQuery = `
INSERT INTO order_items (order_id, product_id, title, price, quantity)
VALUES ($1, $2, $3, $4, $5)
`;
for (const item of items) {
await client.query(insertItemQuery, [
orderId,
item.id,
item.title,
item.price,
item.quantity,
]);
}
// Завершение транзакции
await client.query('COMMIT');
res.status(201).json({ message: 'Order created successfully', orderId });
} catch (error) {
// Откат транзакции в случае ошибки
await client.query('ROLLBACK');
console.error('Error creating order:', error);
res.status(500).json({ error: 'Failed to create order' });
} finally {
client.release();
}
});
// Запуск сервера
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
*/