import { Router } from 'express' import { createManagedAdminUser, getAdminUserList, resetManagedAdminUserPassword, updateManagedAdminUserRole, updateManagedAdminUserStatus, } from '../../services/admin/admin-auth-service.js' import { createJsonHandler, requireAdminRoles } from './shared.js' type AdminUserMutationResult = { user: { userId: number username: string role: string status?: string } } const router = Router() router.use('/users', requireAdminRoles(['admin'])) router.get('/users', createJsonHandler( (req) => getAdminUserList(req.query), { successMessage: 'ok', errorMessage: '读取后台用户列表失败', scope: '[admin/users]', }, )) router.post('/users', createJsonHandler( (req) => createManagedAdminUser(req.body), { successMessage: '后台用户已创建', errorMessage: '创建后台用户失败', scope: '[admin/users:create]', audit: (_req, data) => { const result = data as AdminUserMutationResult return { action: 'admin_user_created', targetType: 'admin_user', targetId: String(result.user.userId), data: { username: result.user.username, role: result.user.role, status: result.user.status, }, } }, }, )) router.post('/users/:userId/role', createJsonHandler( (req) => updateManagedAdminUserRole(String(req.params.userId), req.body, req.adminSession), { successMessage: '用户角色已更新', errorMessage: '更新用户角色失败', scope: '[admin/users/:userId/role]', audit: (_req, data) => { const result = data as AdminUserMutationResult return { action: 'admin_user_role_updated', targetType: 'admin_user', targetId: String(result.user.userId), data: { username: result.user.username, role: result.user.role, }, } }, }, )) router.post('/users/:userId/status', createJsonHandler( (req) => updateManagedAdminUserStatus(String(req.params.userId), req.body, req.adminSession), { successMessage: '用户状态已更新', errorMessage: '更新用户状态失败', scope: '[admin/users/:userId/status]', audit: (_req, data) => { const result = data as AdminUserMutationResult return { action: 'admin_user_status_updated', targetType: 'admin_user', targetId: String(result.user.userId), data: { username: result.user.username, status: result.user.status, }, } }, }, )) router.post('/users/:userId/reset-password', createJsonHandler( (req) => resetManagedAdminUserPassword(String(req.params.userId), req.body), { successMessage: '用户密码已重置', errorMessage: '重置用户密码失败', scope: '[admin/users/:userId/reset-password]', audit: (_req, data) => { const result = data as AdminUserMutationResult return { action: 'admin_user_password_reset', targetType: 'admin_user', targetId: String(result.user.userId), data: { username: result.user.username, }, } }, }, )) export default router