From 5c42f03e47a5c8750ccf9c3e7fef0645951dbd2f Mon Sep 17 00:00:00 2001 From: romantarkin Date: Sun, 17 Aug 2025 10:40:58 +0500 Subject: [PATCH] fix create and update user --- .../src/controllers/userController.js | 38 ++++++++++++++++--- frontend/src/modals/CreateUserModal.js | 2 +- frontend/src/modals/EditUserModal.js | 2 +- frontend/src/pages/UsersPage.js | 7 +++- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/auth-service/src/controllers/userController.js b/auth-service/src/controllers/userController.js index 0bbf83c..5f80fc6 100644 --- a/auth-service/src/controllers/userController.js +++ b/auth-service/src/controllers/userController.js @@ -7,10 +7,23 @@ dotenv.config(); export default { async create(req, res) { try { - const { password, ...rest } = req.body; + const { password, role, ...rest } = req.body; + + // Находим роль по имени + let role_id; + const roleToUse = role || 'user'; // По умолчанию используем "user" + const roleRecord = await Role.findOne({ where: { name: roleToUse } }); + if (!roleRecord) { + return res.status(400).json({ error: `Role '${roleToUse}' not found` }); + } + role_id = roleRecord.id; + const password_hash = await bcrypt.hash(password, 10); - const user = await User.create({ ...rest, password_hash }); - res.status(201).json(user); + const user = await User.create({ ...rest, role_id, password_hash }); + + // Возвращаем пользователя с информацией о роли + const userWithRole = await User.findByPk(user.id, { include: Role }); + res.status(201).json(userWithRole); } catch (err) { res.status(400).json({ error: err.message }); } @@ -43,12 +56,27 @@ export default { try { const user = await User.findByPk(req.params.id); if (!user) return res.status(404).json({ error: 'User not found' }); - const { password, ...rest } = req.body; + + const { password, role, ...rest } = req.body; + + // Обрабатываем роль + if (role !== undefined) { + const roleRecord = await Role.findOne({ where: { name: role } }); + if (!roleRecord) { + return res.status(400).json({ error: `Role '${role}' not found` }); + } + rest.role_id = roleRecord.id; + } + if (password) { rest.password_hash = await bcrypt.hash(password, 10); } + await user.update(rest); - res.json(user); + + // Возвращаем пользователя с информацией о роли + const userWithRole = await User.findByPk(user.id, { include: Role }); + res.json(userWithRole); } catch (err) { res.status(400).json({ error: err.message }); } diff --git a/frontend/src/modals/CreateUserModal.js b/frontend/src/modals/CreateUserModal.js index db96f25..008d448 100644 --- a/frontend/src/modals/CreateUserModal.js +++ b/frontend/src/modals/CreateUserModal.js @@ -14,7 +14,7 @@ export default function CreateUserModal({ isOpen, onClose, user, loading, onChan onChange({ ...user, name: e.target.value })} required className={styles.input} />