Files
multy-stub/server/routers/procurement/routes/auth.js

104 lines
2.8 KiB
JavaScript

const express = require('express')
const router = express.Router()
const User = require('../models/User')
const Company = require('../models/Company')
const { generateToken } = require('../middleware/auth')
// Регистрация
router.post('/register', async (req, res) => {
try {
const { email, password, firstName, lastName, position, phone, fullName, inn, ogrn, legalForm, industry, companySize, website } = req.body;
// Проверка обязательных полей
if (!email || !password || !firstName || !lastName || !fullName) {
return res.status(400).json({ error: 'Missing required fields' });
}
// Проверка существования пользователя
const existingUser = await User.findOne({ email });
if (existingUser) {
return res.status(409).json({ error: 'User already exists' });
}
// Создать компанию
const company = await Company.create({
fullName,
inn,
ogrn,
legalForm,
industry,
companySize,
website
});
// Создать пользователя
const user = await User.create({
email,
password,
firstName,
lastName,
position,
phone,
companyId: company._id
});
// Генерировать токен
const token = generateToken(user._id, user.email);
res.status(201).json({
tokens: {
accessToken: token,
refreshToken: token
},
user: user.toJSON(),
company: company.toObject()
});
} catch (error) {
console.error('Registration error:', error);
res.status(500).json({ error: error.message });
}
});
// Логин
router.post('/login', async (req, res) => {
try {
const { email, password } = req.body;
if (!email || !password) {
return res.status(400).json({ error: 'Email and password required' });
}
// Найти пользователя
const user = await User.findOne({ email });
if (!user) {
return res.status(401).json({ error: 'Invalid credentials' });
}
// Проверить пароль
const isValid = await user.comparePassword(password);
if (!isValid) {
return res.status(401).json({ error: 'Invalid credentials' });
}
// Загрузить компанию
const company = await Company.findById(user.companyId);
// Генерировать токен
const token = generateToken(user._id, user.email);
res.json({
tokens: {
accessToken: token,
refreshToken: token
},
user: user.toJSON(),
company: company?.toObject() || null
});
} catch (error) {
console.error('Login error:', error);
res.status(500).json({ error: error.message });
}
});
module.exports = router