package com.tourguide.api.admin; import com.tourguide.common.api.ApiResponse; import com.tourguide.common.api.PageResponse; import com.tourguide.modules.user.dto.UserCreateRequest; import com.tourguide.modules.user.dto.AdminPasswordResetRequest; import com.tourguide.modules.user.dto.RoleOptionResponse; import com.tourguide.modules.user.dto.UserResponse; import com.tourguide.modules.user.dto.UserStatusRequest; import com.tourguide.modules.user.dto.UserUpdateRequest; import com.tourguide.modules.user.service.AdminUserService; import com.tourguide.security.AppUserPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; /** * 管理后台员工账号管理接口。 * 仅操作 sys_admin_user 表,支持员工查询、新增、编辑、停启、重置密码和删除。 */ @RestController @RequestMapping("/api/admin/users") public class AdminUserController { private final AdminUserService userService; public AdminUserController(AdminUserService userService) { this.userService = userService; } /** * 分页查询后台员工账号,支持按昵称、登录名、角色和状态筛选。 * * @param page 页码,从 1 开始 * @param size 每页记录数 * @param nickname 员工昵称关键字 * @param username 登录账号关键字 * @param roleCode 角色编码 * @param status 账号启用状态 * @return 后台员工账号分页结果 */ @GetMapping public ApiResponse> page(@RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "10") long size, @RequestParam(required = false) String nickname, @RequestParam(required = false) String username, @RequestParam(required = false) String roleCode, @RequestParam(required = false) Integer status) { return ApiResponse.success(userService.page(page, size, nickname, username, roleCode, status)); } /** * 查询当前启用的角色选项,供员工新增和编辑表单选择。 * * @return 可分配角色的编码和名称列表 */ @GetMapping("/role-options") public ApiResponse> roleOptions() { return ApiResponse.success(userService.roleOptions()); } /** * 新增后台员工账号,校验登录名唯一性和所选角色可用性。 * * @param request 员工登录名、初始密码、昵称和角色信息 * @return 新建后的员工账号信息 */ @PostMapping public ApiResponse create(@Valid @RequestBody UserCreateRequest request) { return ApiResponse.success(userService.create(request)); } /** * 更新指定员工的登录名、昵称、角色等可维护资料。 * 当前操作人标识用于执行不能破坏自身权限等业务保护。 * * @param id 员工账号主键 * @param request 员工资料更新参数 * @param principal 当前登录后台账号身份 * @return 更新后的员工账号信息 */ @PutMapping("/{id}") public ApiResponse update(@PathVariable Long id, @Valid @RequestBody UserUpdateRequest request, @AuthenticationPrincipal AppUserPrincipal principal) { return ApiResponse.success(userService.update(id, request, principal.getUserId())); } /** * 启用或禁用指定员工账号,并阻止当前登录人禁用自身账号。 * * @param id 员工账号主键 * @param request 目标状态,1 为启用、0 为禁用 * @param principal 当前登录后台账号身份 * @return 状态更新后的员工账号信息 */ @PutMapping("/{id}/status") public ApiResponse updateStatus(@PathVariable Long id, @Valid @RequestBody UserStatusRequest request, @AuthenticationPrincipal AppUserPrincipal principal) { return ApiResponse.success(userService.updateStatus(id, request.getStatus(), principal.getUserId())); } /** * 由后台管理员重置指定员工的登录密码。 * * @param id 员工账号主键 * @param request 新密码和确认密码 * @return 无业务数据的成功响应 */ @PutMapping("/{id}/password") public ApiResponse resetPassword(@PathVariable Long id, @Valid @RequestBody AdminPasswordResetRequest request) { userService.resetPassword(id, request); return ApiResponse.success(); } /** * 删除指定后台员工账号,当前登录账号不能删除自身。 * * @param id 员工账号主键 * @param principal 当前登录后台账号身份 * @return 无业务数据的成功响应 */ @DeleteMapping("/{id}") public ApiResponse delete(@PathVariable Long id, @AuthenticationPrincipal AppUserPrincipal principal) { userService.delete(id, principal.getUserId()); return ApiResponse.success(); } }