Reflex/backend/config/controllers/authController.js

80 lines
4.6 KiB
JavaScript
Raw Normal View History

2025-05-21 22:13:09 +07:00
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, // Раскомментируем позже
};