Reflex/backend/config/controllers/authController.js
2025-05-21 22:13:09 +07:00

80 lines
4.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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