diff --git a/controller/admin/AdminUserController.js b/controller/admin/AdminUserController.js index ed8a037..e19d88f 100644 --- a/controller/admin/AdminUserController.js +++ b/controller/admin/AdminUserController.js @@ -41,6 +41,19 @@ class AdminUserController { } } + static async getUnverifiedUsers(req, res) { + const unitOfWork = new UnitOfWork(); + await unitOfWork.start(); + try { + const users = await AdminService.getUnverifiedUsers(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; diff --git a/repositories/admin/AdminRepository.js b/repositories/admin/AdminRepository.js index 6f4ada1..a932021 100644 --- a/repositories/admin/AdminRepository.js +++ b/repositories/admin/AdminRepository.js @@ -86,6 +86,31 @@ class AdminRepository { } } + static async getUnverifiedUsers(conn) { + logger.info('AdminRepository.getUnverifiedUsers:start'); + try { + const [rows] = await conn.query(` + SELECT + u.id, u.email, u.user_type, u.role, u.created_at, u.last_login_at, + us.status, us.is_admin_verified, us.email_verified, us.profile_completed, + us.documents_uploaded, us.contract_signed, + pp.first_name, pp.last_name, + cp.company_name + FROM users u + LEFT JOIN user_status us ON u.id = us.user_id + LEFT JOIN personal_profiles pp ON u.id = pp.user_id + LEFT JOIN company_profiles cp ON u.id = cp.user_id + WHERE us.is_admin_verified = 0 + ORDER BY u.created_at DESC + `); + logger.info('AdminRepository.getUnverifiedUsers:success', { count: rows.length }); + return rows; + } catch (error) { + logger.error('AdminRepository.getUnverifiedUsers:error', { error: error.message }); + throw error; + } + } + static async getUserDocuments(conn, userId) { logger.info('AdminRepository.getUserDocuments:start', { userId }); try { diff --git a/routes/getRoutes.js b/routes/getRoutes.js index 62fbf8a..b193f27 100644 --- a/routes/getRoutes.js +++ b/routes/getRoutes.js @@ -54,6 +54,7 @@ router.get('/verify-password-reset', (req, res) => { /* Note: was moved from Pas router.get('/admin/user-stats', authMiddleware, requireAdmin, AdminUserController.getUserStats); router.get('/admin/user-list', authMiddleware, requireAdmin, AdminUserController.getUserList); router.get('/admin/verification-pending-users', authMiddleware, requireAdmin, AdminUserController.getVerificationPendingUsers); +router.get('/admin/unverified-users', authMiddleware, requireAdmin, AdminUserController.getUnverifiedUsers); router.get('/admin/user/:id/documents', authMiddleware, requireAdmin, UserDocumentController.getAllDocumentsForUser); router.get('/admin/server-status', authMiddleware, requireAdmin, ServerStatusController.getStatus); diff --git a/scripts/createAdminUser.js b/scripts/createAdminUser.js index ddefda7..b2c4f4f 100644 --- a/scripts/createAdminUser.js +++ b/scripts/createAdminUser.js @@ -3,8 +3,8 @@ const UnitOfWork = require('../database/UnitOfWork'); const argon2 = require('argon2'); async function createAdminUser() { - // const adminEmail = process.env.ADMIN_EMAIL || 'office@profit-planet.com'; - const adminEmail = process.env.ADMIN_EMAIL || 'loki.aahi@gmail.com'; + const adminEmail = process.env.ADMIN_EMAIL || 'office@profit-planet.com'; + // const adminEmail = process.env.ADMIN_EMAIL || 'loki.aahi@gmail.com'; const adminPassword = process.env.ADMIN_PASSWORD || 'W.profit-planet.com.2025'; // Set a secure password in production! const firstName = process.env.ADMIN_FIRST_NAME || 'Admin'; const lastName = process.env.ADMIN_LAST_NAME || 'User'; diff --git a/services/admin/AdminService.js b/services/admin/AdminService.js index a808d59..311d01b 100644 --- a/services/admin/AdminService.js +++ b/services/admin/AdminService.js @@ -46,6 +46,18 @@ class AdminService { } } + static async getUnverifiedUsers(unitOfWork) { + logger.info('AdminService.getUnverifiedUsers:start'); + try { + const users = await AdminRepository.getUnverifiedUsers(unitOfWork.connection); + logger.info('AdminService.getUnverifiedUsers:success', { count: users.length }); + return users; + } catch (error) { + logger.error('AdminService.getUnverifiedUsers:error', { error: error.message }); + throw error; + } + } + static async verifyUser(unitOfWork, userId, permissions) { logger.info('AdminService.verifyUser:start', { userId, permissions }); try {