104 lines
2.8 KiB
JavaScript
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
|