ads-marketing/auth-service/src/controllers/userController.js
romantarkin 0d22debf40 fix
2025-07-22 16:23:46 +05:00

72 lines
2.4 KiB
JavaScript

import { User, Role } from '../models/index.js';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';
import dotenv from 'dotenv';
dotenv.config();
export default {
async create(req, res) {
try {
const { password, ...rest } = req.body;
const password_hash = await bcrypt.hash(password, 10);
const user = await User.create({ ...rest, password_hash });
res.status(201).json(user);
} catch (err) {
res.status(400).json({ error: err.message });
}
},
async getAll(req, res) {
try {
const users = await User.findAll({ include: Role });
res.json(users);
} catch (err) {
res.status(500).json({ error: err.message });
}
},
async getById(req, res) {
try {
const user = await User.findByPk(req.params.id, { include: Role });
if (!user) return res.status(404).json({ error: 'User not found' });
res.json(user);
} catch (err) {
res.status(500).json({ error: err.message });
}
},
async update(req, res) {
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;
if (password) {
rest.password_hash = await bcrypt.hash(password, 10);
}
await user.update(rest);
res.json(user);
} catch (err) {
res.status(400).json({ error: err.message });
}
},
async delete(req, res) {
try {
const user = await User.findByPk(req.params.id);
if (!user) return res.status(404).json({ error: 'User not found' });
await user.destroy();
res.json({ message: 'User deleted' });
} catch (err) {
res.status(500).json({ error: err.message });
}
},
async login(req, res) {
try {
const { email, password } = req.body;
const user = await User.findOne({ where: { email } });
if (!user) return res.status(401).json({ error: 'Invalid credentials' });
const valid = await bcrypt.compare(password, user.password_hash);
if (!valid) return res.status(401).json({ error: 'Invalid credentials' });
const token = jwt.sign({ id: user.id, role_id: user.role_id }, process.env.JWT_SECRET, { expiresIn: '1d' });
res.json({ token, user: { id: user.id, email: user.email, name: user.name, role_id: user.role_id } });
} catch (err) {
res.status(500).json({ error: err.message });
}
},
};