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, // Раскомментируем позже };