80 lines
4.6 KiB
JavaScript
80 lines
4.6 KiB
JavaScript
const User = require('../models/User'); // Импортируем нашу модель пользователя
|
||
// const bcrypt = require('bcryptjs'); // bcryptjs уже используется внутри модели User.js, здесь он напрямую не нужен для регистрации
|
||
// const jwt = require('jsonwebtoken'); // Понадобится позже для генерации токена
|
||
|
||
// @desc Регистрация нового пользователя
|
||
// @route POST /api/auth/register
|
||
// @access Public
|
||
const registerUser = async (req, res, next) => {
|
||
try {
|
||
const { name, email, password, dateOfBirth, gender } = req.body; // Получаем данные из тела запроса
|
||
|
||
// 1. Простая валидация на сервере (дополнительно к валидации Mongoose)
|
||
if (!name || !email || !password) {
|
||
res.status(400); // Bad Request
|
||
// Используем Error, чтобы передать его в наш будущий обработчик ошибок
|
||
throw new Error('Пожалуйста, заполните все обязательные поля: имя, email и пароль.');
|
||
}
|
||
|
||
// 2. Проверка, не существует ли уже пользователь с таким email
|
||
const userExists = await User.findOne({ email: email.toLowerCase() });
|
||
|
||
if (userExists) {
|
||
res.status(400); // Bad Request
|
||
throw new Error('Пользователь с таким email уже существует.');
|
||
}
|
||
|
||
// 3. Создание нового пользователя
|
||
// Пароль будет автоматически хеширован благодаря middleware в модели User.js
|
||
const user = await User.create({
|
||
name,
|
||
email: email.toLowerCase(),
|
||
password, // Передаем пароль как есть, модель позаботится о хешировании
|
||
dateOfBirth, // Эти поля пока опциональны, если их нет в req.body, они будут undefined
|
||
gender, // и не запишутся, если в схеме нет default значения и они не required
|
||
});
|
||
|
||
if (user) {
|
||
// Если пользователь успешно создан
|
||
// TODO: Сгенерировать JWT токен и отправить его клиенту
|
||
|
||
res.status(201).json({ // 201 Created
|
||
_id: user._id,
|
||
name: user.name,
|
||
email: user.email,
|
||
// token: generateToken(user._id) // Раскомментируем, когда будет функция generateToken
|
||
message: 'Пользователь успешно зарегистрирован!' // Временное сообщение
|
||
});
|
||
} else {
|
||
res.status(400); // Bad Request
|
||
throw new Error('Неверные данные пользователя. Не удалось создать пользователя.');
|
||
}
|
||
} catch (error) {
|
||
// Логируем ошибку на сервере для отладки
|
||
console.error('Ошибка при регистрации:', error.message);
|
||
// Если статус не был установлен ранее (например, при ошибке валидации Mongoose)
|
||
if (!res.statusCode || res.statusCode < 400) {
|
||
res.status(400); // По умолчанию Bad Request для ошибок регистрации
|
||
}
|
||
// Передаем ошибку дальше, чтобы ее мог обработать централизованный обработчик ошибок (если он есть)
|
||
// или Express обработает ее по умолчанию.
|
||
// Мы пока будем просто отправлять сообщение ошибки.
|
||
res.json({ message: error.message, stack: process.env.NODE_ENV === 'production' ? null : error.stack });
|
||
// next(error); // Это для централизованного обработчика ошибок, который мы можем добавить позже
|
||
}
|
||
};
|
||
|
||
|
||
// TODO: Функция для входа пользователя (loginUser)
|
||
// const loginUser = async (req, res, next) => { ... };
|
||
|
||
// TODO: Функция для получения информации о текущем пользователе (getMe)
|
||
// const getMe = async (req, res, next) => { ... };
|
||
|
||
|
||
// Экспортируем функции контроллера
|
||
module.exports = {
|
||
registerUser,
|
||
// loginUser, // Раскомментируем позже
|
||
// getMe, // Раскомментируем позже
|
||
}; |