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<PageResponse<UserResponse>> 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<List<RoleOptionResponse>> roleOptions() {
|
return ApiResponse.success(userService.roleOptions());
|
}
|
|
/**
|
* 新增后台员工账号,校验登录名唯一性和所选角色可用性。
|
*
|
* @param request 员工登录名、初始密码、昵称和角色信息
|
* @return 新建后的员工账号信息
|
*/
|
@PostMapping
|
public ApiResponse<UserResponse> create(@Valid @RequestBody UserCreateRequest request) {
|
return ApiResponse.success(userService.create(request));
|
}
|
|
/**
|
* 更新指定员工的登录名、昵称、角色等可维护资料。
|
* 当前操作人标识用于执行不能破坏自身权限等业务保护。
|
*
|
* @param id 员工账号主键
|
* @param request 员工资料更新参数
|
* @param principal 当前登录后台账号身份
|
* @return 更新后的员工账号信息
|
*/
|
@PutMapping("/{id}")
|
public ApiResponse<UserResponse> 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<UserResponse> 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<Void> resetPassword(@PathVariable Long id,
|
@Valid @RequestBody AdminPasswordResetRequest request) {
|
userService.resetPassword(id, request);
|
return ApiResponse.success();
|
}
|
|
/**
|
* 删除指定后台员工账号,当前登录账号不能删除自身。
|
*
|
* @param id 员工账号主键
|
* @param principal 当前登录后台账号身份
|
* @return 无业务数据的成功响应
|
*/
|
@DeleteMapping("/{id}")
|
public ApiResponse<Void> delete(@PathVariable Long id,
|
@AuthenticationPrincipal AppUserPrincipal principal) {
|
userService.delete(id, principal.getUserId());
|
return ApiResponse.success();
|
}
|
}
|