package com.sinata.appointment.controller; import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.stp.StpUtil; import com.sinata.appointment.common.Result; import com.sinata.appointment.common.ResultUtil; import com.sinata.appointment.dto.CaptchaResponse; import com.sinata.appointment.dto.CurrentUserPasswordUpdateRequest; import com.sinata.appointment.dto.CurrentUserUpdateRequest; import com.sinata.appointment.dto.LoginRequest; import com.sinata.appointment.dto.LoginResponse; import com.sinata.appointment.dto.SysUserDetailVo; import com.sinata.appointment.service.AuthApplicationService; import com.sinata.appointment.service.CaptchaService; import com.sinata.appointment.service.SysUserApplicationService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Tag(name = "认证") @RestController @RequestMapping("/api/auth") @RequiredArgsConstructor public class AuthController { private final AuthApplicationService authApplicationService; private final CaptchaService captchaService; private final SysUserApplicationService sysUserApplicationService; @Operation(summary = "图形验证码") @GetMapping("/captcha") public Result captcha() { return ResultUtil.data(captchaService.generate()); } @Operation(summary = "登录") @PostMapping("/login") public Result login(@Valid @RequestBody LoginRequest request) { return ResultUtil.data(authApplicationService.login(request)); } @Operation(summary = "当前登录用户信息") @GetMapping("/me") @SaCheckLogin public Result me() { return ResultUtil.data(sysUserApplicationService.getCurrentUserDetail(StpUtil.getLoginIdAsLong())); } @Operation(summary = "当前登录用户修改资料") @PutMapping("/me") @SaCheckLogin public Result updateMe(@Valid @RequestBody CurrentUserUpdateRequest request) { return ResultUtil.data(sysUserApplicationService.updateCurrentUser(StpUtil.getLoginIdAsLong(), request)); } @Operation(summary = "当前登录用户修改密码") @PostMapping("/me/password") @SaCheckLogin public Result updateMyPassword(@Valid @RequestBody CurrentUserPasswordUpdateRequest request) { sysUserApplicationService.updateCurrentPassword(StpUtil.getLoginIdAsLong(), request); return ResultUtil.success(); } @Operation(summary = "登出") @PostMapping("/logout") public Result logout() { authApplicationService.logout(); return ResultUtil.success(); } }