153 lines
5.4 KiB
Java
153 lines
5.4 KiB
Java
|
package com.guwan.backend.controller;
|
||
|
|
||
|
import com.guwan.backend.common.Result;
|
||
|
import com.guwan.backend.dto.user.RegisterDTO;
|
||
|
import com.guwan.backend.dto.user.UserDTO;
|
||
|
import com.guwan.backend.service.UserService;
|
||
|
import com.guwan.backend.vo.user.LoginRequest;
|
||
|
import com.guwan.backend.vo.user.RegisterRequest;
|
||
|
import com.guwan.backend.vo.user.EmailRegisterRequest;
|
||
|
import com.guwan.backend.vo.user.PhoneRegisterRequest;
|
||
|
import jakarta.validation.Valid;
|
||
|
import jakarta.validation.constraints.Pattern;
|
||
|
import lombok.RequiredArgsConstructor;
|
||
|
import lombok.extern.slf4j.Slf4j;
|
||
|
import org.springframework.validation.annotation.Validated;
|
||
|
import org.springframework.web.bind.annotation.*;
|
||
|
import jakarta.validation.constraints.Email;
|
||
|
|
||
|
@Slf4j
|
||
|
@RestController
|
||
|
@RequestMapping("/api/user")
|
||
|
@RequiredArgsConstructor
|
||
|
@Validated
|
||
|
public class UserController {
|
||
|
|
||
|
private final UserService userService;
|
||
|
|
||
|
@PostMapping("/register")
|
||
|
public Result<UserDTO> register(@RequestBody @Valid RegisterDTO request) {
|
||
|
try {
|
||
|
log.info("用户注册: {}", request.getUsername());
|
||
|
return Result.success("注册成功", userService.register(request));
|
||
|
} catch (IllegalArgumentException e) {
|
||
|
return Result.validateFailed(e.getMessage());
|
||
|
} catch (Exception e) {
|
||
|
log.error("注册失败", e);
|
||
|
return Result.error("系统错误");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@PostMapping("/login")
|
||
|
public Result<UserDTO> login(@RequestBody @Valid LoginRequest request) {
|
||
|
try {
|
||
|
log.info("用户登录: {}", request.getUsername());
|
||
|
return Result.success("登录成功", userService.login(request));
|
||
|
} catch (IllegalArgumentException e) {
|
||
|
return Result.unauthorized(e.getMessage());
|
||
|
} catch (Exception e) {
|
||
|
log.error("登录失败", e);
|
||
|
return Result.error("系统错误");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@GetMapping("/current")
|
||
|
public Result<UserDTO> getCurrentUser() {
|
||
|
UserDTO user = userService.getCurrentUser();
|
||
|
if (user == null) {
|
||
|
return Result.unauthorized("用户未登录");
|
||
|
}
|
||
|
return Result.success(user);
|
||
|
}
|
||
|
|
||
|
@GetMapping("/{id}")
|
||
|
public Result<UserDTO> getUserById(@PathVariable Long id) {
|
||
|
UserDTO user = userService.getUserById(id);
|
||
|
if (user == null) {
|
||
|
return Result.notFound("用户不存在");
|
||
|
}
|
||
|
return Result.success(user);
|
||
|
}
|
||
|
|
||
|
@PostMapping("/token/refresh")
|
||
|
public Result<String> refreshToken(@RequestHeader(value = "Authorization", required = false) String token) {
|
||
|
if (token == null || !token.startsWith("Bearer ")) {
|
||
|
return Result.error("无效的token");
|
||
|
}
|
||
|
try {
|
||
|
String newToken = userService.refreshToken(token.substring(7));
|
||
|
return Result.success(newToken);
|
||
|
} catch (Exception e) {
|
||
|
log.error("刷新token失败", e);
|
||
|
return Result.error(e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@PostMapping("/register/email")
|
||
|
public Result<UserDTO> registerByEmail(@RequestBody @Valid EmailRegisterRequest request) {
|
||
|
log.info("邮箱注册: {}", request.getEmail());
|
||
|
return Result.success(userService.registerByEmail(request));
|
||
|
}
|
||
|
|
||
|
@PostMapping("/register/phone")
|
||
|
public Result<UserDTO> registerByPhone(@RequestBody @Valid PhoneRegisterRequest request) {
|
||
|
log.info("手机号注册: {}", request.getPhone());
|
||
|
return Result.success(userService.registerByPhone(request));
|
||
|
}
|
||
|
|
||
|
@PostMapping("/email/code")
|
||
|
public Result<Void> sendEmailCode(
|
||
|
@RequestParam @Email(message = "邮箱格式不正确") String email) {
|
||
|
try {
|
||
|
userService.sendEmailCode(email);
|
||
|
return Result.success();
|
||
|
} catch (Exception e) {
|
||
|
log.error("发送邮箱验证码失败", e);
|
||
|
return Result.error(e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@PostMapping("/phone/code")
|
||
|
public Result<Void> sendPhoneCode(
|
||
|
@RequestParam @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确") String phone) {
|
||
|
try {
|
||
|
userService.sendPhoneCode(phone);
|
||
|
return Result.success();
|
||
|
} catch (Exception e) {
|
||
|
log.error("发送短信验证码失败", e);
|
||
|
return Result.error(e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@PostMapping("/password/reset")
|
||
|
public Result<Void> resetPassword(@RequestParam @Email String email) {
|
||
|
try {
|
||
|
userService.resetPassword(email);
|
||
|
return Result.success();
|
||
|
} catch (Exception e) {
|
||
|
log.error("重置密码失败", e);
|
||
|
return Result.error(e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@PostMapping("/password/change")
|
||
|
public Result<Void> changePassword(@RequestParam String oldPassword, @RequestParam String newPassword) {
|
||
|
try {
|
||
|
userService.changePassword(oldPassword, newPassword);
|
||
|
return Result.success();
|
||
|
} catch (Exception e) {
|
||
|
log.error("修改密码失败", e);
|
||
|
return Result.error(e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@PutMapping("/info")
|
||
|
public Result<UserDTO> updateUserInfo(@RequestBody @Valid UserDTO userDTO) {
|
||
|
try {
|
||
|
return Result.success(userService.updateUserInfo(userDTO));
|
||
|
} catch (Exception e) {
|
||
|
log.error("更新用户信息失败", e);
|
||
|
return Result.error(e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
}
|