- 在ApiResponse类中添加conflict方法以处理冲突响应 - 在UserController中实现用户登出功能,返回标准化的API响应 - 在ChatController中实现会话删除功能,返回相应的成功或错误信息 - 更新ErrorCode类,添加CONFLICT错误码以支持新的响应类型 - 修改OpenApiConfig中的API文档标题和描述 此提交增强了用户体验,提供了更清晰的错误处理和API文档。
155 lines
7.3 KiB
Java
155 lines
7.3 KiB
Java
package com.yundage.chat.controller;
|
|
|
|
import com.yundage.chat.common.ApiResponse;
|
|
import com.yundage.chat.common.ErrorCode;
|
|
import com.yundage.chat.dto.*;
|
|
import com.yundage.chat.service.UserService;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
import jakarta.validation.Valid;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
@RestController
|
|
@RequestMapping("/api/auth")
|
|
@Tag(name = "认证管理", description = "用户认证相关接口")
|
|
public class AuthController {
|
|
|
|
@Autowired
|
|
private UserService userService;
|
|
|
|
@PostMapping("/send-code")
|
|
@Operation(summary = "发送验证码", description = "向手机或邮箱发送验证码")
|
|
@ApiResponses(value = {
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "验证码发送成功"),
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "验证码发送失败")
|
|
})
|
|
public ApiResponse<?> sendVerificationCode(@Valid @RequestBody VerificationCodeRequest request) {
|
|
try {
|
|
String code = userService.sendVerificationCode(request.getContact());
|
|
Map<String, String> data = new HashMap<>();
|
|
data.put("message", "验证码已发送");
|
|
// 仅在开发模式下返回验证码
|
|
if (code != null) {
|
|
data.put("code", code);
|
|
}
|
|
return ApiResponse.success("验证码发送成功", data);
|
|
} catch (Exception e) {
|
|
return ApiResponse.error(ErrorCode.VERIFICATION_CODE_SEND_FAILED, e.getMessage());
|
|
}
|
|
}
|
|
|
|
@PostMapping("/register")
|
|
@Operation(summary = "用户注册", description = "注册新用户账号")
|
|
@ApiResponses(value = {
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "注册成功"),
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "注册失败")
|
|
})
|
|
public ApiResponse<AuthResponse> register(@Valid @RequestBody RegisterRequest request) {
|
|
try {
|
|
AuthResponse response = userService.register(request);
|
|
return ApiResponse.success("注册成功", response);
|
|
} catch (RuntimeException e) {
|
|
String message = e.getMessage();
|
|
if (message.contains("邮箱已被注册")) {
|
|
return ApiResponse.error(ErrorCode.EMAIL_ALREADY_REGISTERED, message);
|
|
} else if (message.contains("手机号已被注册")) {
|
|
return ApiResponse.error(ErrorCode.PHONE_ALREADY_REGISTERED, message);
|
|
} else if (message.contains("验证码")) {
|
|
return ApiResponse.error(ErrorCode.VERIFICATION_CODE_INVALID, message);
|
|
} else {
|
|
return ApiResponse.error(ErrorCode.REGISTER_FAILED, message);
|
|
}
|
|
} catch (Exception e) {
|
|
return ApiResponse.error(ErrorCode.REGISTER_FAILED, "注册失败");
|
|
}
|
|
}
|
|
|
|
@PostMapping("/login")
|
|
@Operation(summary = "用户登录", description = "使用验证码登录")
|
|
@ApiResponses(value = {
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "登录成功"),
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "登录失败")
|
|
})
|
|
public ApiResponse<AuthResponse> login(@Valid @RequestBody LoginRequest request) {
|
|
try {
|
|
AuthResponse response = userService.login(request);
|
|
return ApiResponse.success("登录成功", response);
|
|
} catch (RuntimeException e) {
|
|
String message = e.getMessage();
|
|
if (message.contains("验证码无效") || message.contains("验证码已过期")) {
|
|
return ApiResponse.error(ErrorCode.VERIFICATION_CODE_INVALID, message);
|
|
} else if (message.contains("用户不存在")) {
|
|
return ApiResponse.error(ErrorCode.USER_NOT_FOUND, message);
|
|
} else {
|
|
return ApiResponse.error(ErrorCode.LOGIN_FAILED, message);
|
|
}
|
|
} catch (Exception e) {
|
|
return ApiResponse.error(ErrorCode.LOGIN_FAILED, "登录失败");
|
|
}
|
|
}
|
|
|
|
@PostMapping("/logout")
|
|
@Operation(summary = "用户登出", description = "退出用户登录状态")
|
|
@ApiResponses(value = {
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "登出成功"),
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "登出失败")
|
|
})
|
|
public ApiResponse<?> logout() {
|
|
try {
|
|
userService.logout();
|
|
return ApiResponse.success("登出成功");
|
|
} catch (Exception e) {
|
|
return ApiResponse.error(ErrorCode.INTERNAL_ERROR, "登出失败: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@PostMapping("/forgot-password")
|
|
@Operation(summary = "忘记密码", description = "发送密码重置邮件")
|
|
@ApiResponses(value = {
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "邮件发送成功"),
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "邮件发送失败")
|
|
})
|
|
public ApiResponse<?> forgotPassword(@Valid @RequestBody PasswordResetRequest request) {
|
|
try {
|
|
userService.requestPasswordReset(request);
|
|
return ApiResponse.success("密码重置邮件已发送");
|
|
} catch (RuntimeException e) {
|
|
if (e.getMessage().contains("用户不存在")) {
|
|
return ApiResponse.error(ErrorCode.USER_NOT_FOUND, e.getMessage());
|
|
} else {
|
|
return ApiResponse.error(ErrorCode.INTERNAL_ERROR, e.getMessage());
|
|
}
|
|
} catch (Exception e) {
|
|
return ApiResponse.error(ErrorCode.INTERNAL_ERROR, "邮件发送失败");
|
|
}
|
|
}
|
|
|
|
@PostMapping("/reset-password")
|
|
@Operation(summary = "重置密码", description = "使用token重置密码")
|
|
@ApiResponses(value = {
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "密码重置成功"),
|
|
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "400", description = "密码重置失败")
|
|
})
|
|
public ApiResponse<?> resetPassword(@Valid @RequestBody ResetPasswordRequest request) {
|
|
try {
|
|
userService.resetPassword(request);
|
|
return ApiResponse.success("密码重置成功");
|
|
} catch (RuntimeException e) {
|
|
String message = e.getMessage();
|
|
if (message.contains("重置令牌无效") || message.contains("已过期")) {
|
|
return ApiResponse.error(ErrorCode.PASSWORD_RESET_TOKEN_INVALID, message);
|
|
} else if (message.contains("用户不存在")) {
|
|
return ApiResponse.error(ErrorCode.USER_NOT_FOUND, message);
|
|
} else {
|
|
return ApiResponse.error(ErrorCode.INTERNAL_ERROR, message);
|
|
}
|
|
} catch (Exception e) {
|
|
return ApiResponse.error(ErrorCode.INTERNAL_ERROR, "密码重置失败");
|
|
}
|
|
}
|
|
} |