CentralBackend/controller/admin/AdminUserController.js
2025-09-07 12:44:01 +02:00

115 lines
4.0 KiB
JavaScript

const UnitOfWork = require('../../repositories/UnitOfWork');
const AdminService = require('../../services/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;