package com.youlai.boot.auth.controller; import com.youlai.boot.auth.model.vo.CaptchaVO; import com.youlai.boot.auth.model.dto.LoginRequest; import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.core.web.Result; import com.youlai.boot.auth.service.AuthService; import com.youlai.boot.common.annotation.Log; import com.youlai.boot.security.model.AuthenticationToken; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; /** * 认证控制层 * * @author Ray.Hao * @since 0.0.1 */ @Tag(name = "01.认证中心") @RestController @RequestMapping("/api/v1/auth") @RequiredArgsConstructor @Slf4j public class AuthController { private final AuthService authService; @Operation(summary = "获取验证码") @GetMapping("/captcha") public Result getCaptcha() { CaptchaVO captcha = authService.getCaptcha(); return Result.success(captcha); } @Operation(summary = "账号密码登录") @PostMapping("/login") @Log(value = "登录", module = LogModuleEnum.LOGIN) public Result login(@RequestBody @Valid LoginRequest request) { AuthenticationToken authenticationToken = authService.login(request.getUsername(), request.getPassword()); return Result.success(authenticationToken); } @Operation(summary = "短信验证码登录") @PostMapping("/login/sms") @Log(value = "短信验证码登录", module = LogModuleEnum.LOGIN) public Result loginBySms( @Parameter(description = "手机号", example = "18812345678") @RequestParam String mobile, @Parameter(description = "验证码", example = "123456") @RequestParam String code ) { AuthenticationToken loginResult = authService.loginBySms(mobile, code); return Result.success(loginResult); } @Operation(summary = "发送登录短信验证码") @PostMapping("/sms/code") public Result sendSmsCode( @Parameter(description = "手机号", example = "18812345678") @RequestParam String mobile ) { authService.sendSmsCode(mobile); return Result.success(); } @Operation(summary = "退出登录") @DeleteMapping("/logout") @Log(value = "退出登录", module = LogModuleEnum.LOGIN) public Result logout() { authService.logout(); return Result.success(); } @Operation(summary = "刷新令牌") @PostMapping("/refresh-token") public Result refreshToken( @Parameter(description = "刷新令牌", example = "xxx.xxx.xxx") @RequestParam String refreshToken ) { AuthenticationToken authenticationToken = authService.refreshToken(refreshToken); return Result.success(authenticationToken); } }