package top.suyiiyii.sims.controller; import cn.hutool.core.util.StrUtil; import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletRequest; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import top.suyiiyii.sims.common.AuthAccess; import top.suyiiyii.sims.common.Result; import top.suyiiyii.sims.dto.CommonResponse; import top.suyiiyii.sims.dto.UserDto; import top.suyiiyii.sims.exception.ServiceException; import top.suyiiyii.sims.service.RoleService; import top.suyiiyii.sims.service.UserService; import java.util.List; /** * @Author tortoise * @Date 2024/8/10 22:25 * @PackageName:top.suyiiyii.sims.controller * @ClassName: UserController * @Description: TODO * @Version 1.0 */ @Slf4j @RestController //@RequestMapping("/user") public class UserController { @Autowired UserService userService; @Autowired RoleService roleService; @AuthAccess(allowRoles = {"guest"}) @PostMapping("/user/login") public Result<LoginResponse> login(@RequestBody LoginRequest request, HttpServletRequest httpServletRequest) { log.info("login request:{}", request); if (StrUtil.isBlank(request.getUsername()) || StrUtil.isBlank(request.getPassword())) { return Result.error("用户名或密码不能为空"); } String token = userService.login(request.getUsername(), request.getPassword()); if (token == null) { return Result.error("用户名或密码错误"); } LoginResponse response = new LoginResponse(); response.setToken(token); return Result.success(response); } @AuthAccess(allowRoles = {"guest"}) @PostMapping("/user/register") public Result<CommonResponse> register(@RequestBody RegisterRequest request) { log.info("register request:{}", request); if (StrUtil.isBlank(request.getUsername()) || StrUtil.isBlank(request.getPassword())) { return Result.error("用户名或密码不能为空"); } if (request.getPassword() == null || request.getPassword().length() < 3) { throw new ServiceException("密码长度不能小于3位"); } userService.register(request); return Result.success(CommonResponse.factory("注册成功")); } @Operation(description = "删除单个用户") @AuthAccess(allowRoles = {"admin"}) @DeleteMapping("/admin/user/{id}") public Result<CommonResponse> adminDelete(@PathVariable Integer id) { log.info("delete request:{}", id); userService.deleteUser(id); return Result.success(CommonResponse.factory("删除成功")); } @Operation(description = "获取所有用户信息") @AuthAccess(allowRoles = {"admin"}) @GetMapping("/admin/user") public Result<List<UserDto>> adminGet() { List<UserDto> allUsers = userService.findAllUsers(); return Result.success(allUsers); } @Operation(description = "根据 id 获取用户信息") @AuthAccess(allowRoles = {"admin"}) @GetMapping("/admin/user/{id}") public Result<UserDto> adminGetById(@PathVariable Integer id) { log.info("selectById request:{}", id); UserDto user = userService.findUser(id); return Result.success(user); } @Operation(description = "获取当前用户信息") @AuthAccess(allowRoles = {"user"}) @GetMapping("/user/me") public Result<UserDto> getSelf() { UserDto user = userService.findUser(0); return Result.success(user); } @Data public static class RegisterRequest { private String username; private Integer studentId; private String password; private String email; private String grade; private String userGroup; } @Data public static class LoginRequest { public String username; public String password; } @Data public static class LoginResponse { public String token; } }