import { Router } from 'express' import { createManagedAdminUser, getAdminUserList, resetManagedAdminUserPassword, resetManagedAdminUserDevice, updateManagedAdminUserDisplayName, updateManagedAdminUserPhone, updateManagedAdminUserTestAccount, updateManagedAdminUserRole, updateManagedAdminUserStatus, } from '../../services/admin/admin-auth-service.js' import { createJsonHandler, getRequiredAdminSession, requireAdminRoles } from './session.js' type AdminUserMutationResult = { user: { userId: number username: string displayName: 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, getRequiredAdminSession(req), ), { 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/display-name', createJsonHandler( (req) => updateManagedAdminUserDisplayName(String(req.params.userId || ''), req.body), { successMessage: '用户姓名已更新', errorMessage: '更新用户姓名失败', scope: '[admin/users/:userId/display-name]', audit: (_req, data) => { const result = data as AdminUserMutationResult return { action: 'admin_user_display_name_updated', targetType: 'admin_user', targetId: String(result.user.userId), data: { username: result.user.username, displayName: result.user.displayName, }, } }, }, ), ) router.post( '/users/:userId/status', createJsonHandler( (req) => updateManagedAdminUserStatus( String(req.params.userId || ''), req.body, getRequiredAdminSession(req), ), { 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, }, } }, }, ), ) router.post( '/users/:userId/phone', createJsonHandler( (req) => updateManagedAdminUserPhone( String(req.params.userId || ''), req.body, getRequiredAdminSession(req), ), { successMessage: '手机号已绑定', errorMessage: '绑定手机号失败', scope: '[admin/users/:userId/phone]', audit: (_req, data) => { const result = data as AdminUserMutationResult return { action: 'admin_user_phone_updated', targetType: 'admin_user', targetId: String(result.user.userId), data: { username: result.user.username }, } }, }, ), ) router.post( '/users/:userId/device/reset', createJsonHandler( (req) => resetManagedAdminUserDevice(String(req.params.userId || ''), getRequiredAdminSession(req)), { successMessage: '设备绑定已重置', errorMessage: '重置设备绑定失败', scope: '[admin/users/:userId/device/reset]', audit: (_req, data) => { const result = data as AdminUserMutationResult return { action: 'admin_user_device_reset', targetType: 'admin_user', targetId: String(result.user.userId), data: { username: result.user.username }, } }, }, ), ) router.post( '/users/:userId/test-account', createJsonHandler( (req) => updateManagedAdminUserTestAccount(String(req.params.userId || ''), req.body), { successMessage: '测试账号设置已更新', errorMessage: '更新测试账号设置失败', scope: '[admin/users/:userId/test-account]', audit: (_req, data) => { const result = data as AdminUserMutationResult return { action: 'admin_user_test_account_updated', targetType: 'admin_user', targetId: String(result.user.userId), data: { username: result.user.username }, } }, }, ), ) export default router