AuthController.java
package com.newbit.auth.controller;
import com.newbit.auth.dto.request.LoginRequestDTO;
import com.newbit.auth.dto.request.RefreshTokenRequestDTO;
import com.newbit.auth.dto.response.TokenResponseDTO;
import com.newbit.auth.service.AuthService;
import com.newbit.common.dto.ApiResponse;
import com.newbit.user.service.LoginService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "인증 API", description = "인증 관련 API (토큰 발급, 로그인, 로그아웃 등)")
@RestController
@RequestMapping("/api/v1/auth")
@RequiredArgsConstructor
public class AuthController {
private final AuthService authService;
private final LoginService loginService;
@Operation(summary = "로그인", description = "로그인 기능")
@PostMapping("/login")
public ResponseEntity<ApiResponse<TokenResponseDTO>> login(@RequestBody LoginRequestDTO request) {
TokenResponseDTO token = authService.login(request);
loginService.handleLoginSuccess(token.getUserId());
return ResponseEntity.ok(ApiResponse.success(token));
}
@Operation(summary = "refresh 토큰 재발급", description = "refresh 토큰 재발급")
@PostMapping("/refresh")
public ResponseEntity<ApiResponse<TokenResponseDTO>> refreshToken(
@RequestBody RefreshTokenRequestDTO request
){
TokenResponseDTO response = authService.refreshToken(request.getRefreshToken());
return ResponseEntity.ok(ApiResponse.success(response));
}
@Operation(summary = "로그아웃", description = "로그아웃 기능")
@PostMapping("/logout")
public ResponseEntity<ApiResponse<Void>> logout(@RequestBody RefreshTokenRequestDTO request) {
authService.logout(request.getRefreshToken());
return ResponseEntity.ok(ApiResponse.success(null));
}
}