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