From 25062719ed1760dee4f92b7865cb00386b4e8cc3 Mon Sep 17 00:00:00 2001 From: Yan Kasabutski Date: Tue, 13 May 2025 04:07:19 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=C2=AB?= =?UTF-8?q?sk1/src/routes=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sk1/src/routes/auth.js | 57 ++++++++++++++++++++++++++++++++++++++++++ sk1/src/routes/cart.js | 40 +++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 sk1/src/routes/auth.js create mode 100644 sk1/src/routes/cart.js diff --git a/sk1/src/routes/auth.js b/sk1/src/routes/auth.js new file mode 100644 index 0000000..0779f65 --- /dev/null +++ b/sk1/src/routes/auth.js @@ -0,0 +1,57 @@ +const express = require('express'); +const router = express.Router(); +const User = require('../models/User'); +const jwt = require('jsonwebtoken'); +const bcrypt = require('bcryptjs'); + +// Регистрация +router.post('/register', async (req, res) => { + try { + const { firstName, lastName, email, password } = req.body; + + // Проверка существования пользователя + const existingUser = await User.findOne({ email }); + if (existingUser) { + return res.status(400).json({ message: 'User already exists' }); + } + + // Создание пользователя + const user = new User({ firstName, lastName, email, password }); + await user.save(); + + // Создание JWT токена + const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' }); + + res.status(201).json({ token, userId: user._id }); + } catch (error) { + res.status(500).json({ message: 'Something went wrong' }); + } +}); + +// Вход +router.post('/login', async (req, res) => { + try { + const { email, password } = req.body; + + // Поиск пользователя + const user = await User.findOne({ email }); + if (!user) { + return res.status(400).json({ message: 'Invalid credentials' }); + } + + // Проверка пароля + const isMatch = await bcrypt.compare(password, user.password); + if (!isMatch) { + return res.status(400).json({ message: 'Invalid credentials' }); + } + + // Создание JWT токена + const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' }); + + res.json({ token, userId: user._id }); + } catch (error) { + res.status(500).json({ message: 'Something went wrong' }); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/sk1/src/routes/cart.js b/sk1/src/routes/cart.js new file mode 100644 index 0000000..dea4427 --- /dev/null +++ b/sk1/src/routes/cart.js @@ -0,0 +1,40 @@ +const express = require('express'); +const router = express.Router(); +const Cart = require('../models/Cart'); +const auth = require('../middleware/auth'); + +// Получить корзину пользователя +router.get('/', auth, async (req, res) => { + try { + let cart = await Cart.findOne({ userId: req.userId }).populate('userId'); + if (!cart) { + cart = new Cart({ userId: req.userId, items: [] }); + await cart.save(); + } + res.json(cart); + } catch (error) { + res.status(500).json({ message: 'Something went wrong' }); + } +}); + +// Обновить корзину +router.post('/', auth, async (req, res) => { + try { + const { items } = req.body; + + let cart = await Cart.findOne({ userId: req.userId }); + if (!cart) { + cart = new Cart({ userId: req.userId, items }); + } else { + cart.items = items; + cart.updatedAt = Date.now(); + } + + await cart.save(); + res.json(cart); + } catch (error) { + res.status(500).json({ message: 'Something went wrong' }); + } +}); + +module.exports = router; \ No newline at end of file