115 lines
4.0 KiB
JavaScript
115 lines
4.0 KiB
JavaScript
const UnitOfWork = require('../../database/UnitOfWork');
|
|
const AdminService = require('../../services/admin/AdminService');
|
|
|
|
class AdminUserController {
|
|
static async getUserStats(req, res) {
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
const stats = await AdminService.getUserStats(unitOfWork);
|
|
await unitOfWork.commit();
|
|
res.json({ success: true, stats });
|
|
} catch (error) {
|
|
await unitOfWork.rollback(error);
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
|
|
static async getUserList(req, res) {
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
const users = await AdminService.getUserList(unitOfWork);
|
|
await unitOfWork.commit();
|
|
res.json({ success: true, users });
|
|
} catch (error) {
|
|
await unitOfWork.rollback(error);
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
|
|
static async getVerificationPendingUsers(req, res) {
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
const users = await AdminService.getVerificationPendingUsers(unitOfWork);
|
|
await unitOfWork.commit();
|
|
res.json({ success: true, users });
|
|
} catch (error) {
|
|
await unitOfWork.rollback(error);
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
|
|
static async verifyUser(req, res) {
|
|
const userId = req.params.id;
|
|
const { permissions = [] } = req.body;
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
const result = await AdminService.verifyUser(unitOfWork, userId, permissions);
|
|
await unitOfWork.commit();
|
|
res.json({ success: true, ...result });
|
|
} catch (error) {
|
|
await unitOfWork.rollback(error);
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
|
|
static async getFullUserAccountDetails(req, res) {
|
|
if (!req.user || (req.user.role !== 'admin' && req.user.role !== 'super_admin')) {
|
|
return res.status(403).json({ success: false, message: 'Forbidden' });
|
|
}
|
|
const userId = req.params.id;
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
const details = await AdminService.getFullUserAccountDetails(unitOfWork, userId);
|
|
await unitOfWork.commit();
|
|
res.json({ success: true, ...details });
|
|
} catch (error) {
|
|
await unitOfWork.rollback(error);
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
|
|
static async updateUserPermissions(req, res) {
|
|
const userId = Number(req.params.id);
|
|
const permissions = req.body.permissions;
|
|
if (!Array.isArray(permissions) || permissions.some(p => typeof p !== 'string')) {
|
|
return res.status(400).json({ success: false, message: 'Invalid permissions format.' });
|
|
}
|
|
if (!req.user || req.user.role !== 'admin') {
|
|
return res.status(403).json({ success: false, message: 'Forbidden: Admins only.' });
|
|
}
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
await AdminService.updateUserPermissions(unitOfWork, userId, permissions);
|
|
await unitOfWork.commit();
|
|
return res.json({ success: true, message: 'Permissions updated.' });
|
|
} catch (error) {
|
|
await unitOfWork.rollback(error);
|
|
return res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
|
|
static async deleteUser(req, res) {
|
|
if (!req.user || req.user.role !== 'admin') {
|
|
return res.status(403).json({ success: false, message: 'Forbidden: Admins only.' });
|
|
}
|
|
const userId = req.params.id;
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
await AdminService.deleteUser(unitOfWork, userId);
|
|
await unitOfWork.commit();
|
|
res.json({ success: true, message: 'User deleted.' });
|
|
} catch (error) {
|
|
await unitOfWork.rollback(error);
|
|
res.status(500).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = AdminUserController; |