-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMemberRestController.java
More file actions
59 lines (51 loc) · 3.06 KB
/
MemberRestController.java
File metadata and controls
59 lines (51 loc) · 3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package fitfit.domain.member.controller;
import fitfit.domain.kakao.service.KakaoOidcService;
import fitfit.domain.member.dto.MemberDataDTO;
import fitfit.domain.member.dto.MemberRequestDTO;
import fitfit.domain.member.dto.MemberResponseDTO;
import fitfit.domain.member.entity.Member;
import fitfit.domain.member.service.MemberCommandUseCase;
import fitfit.domain.token.service.MemberTokenCommandUseCase;
import fitfit.global.apiPayload.ApiResponse;
import fitfit.global.enums.Provider;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
@RequestMapping("/api/members")
@RequiredArgsConstructor
@Tag(name = "Member", description = "회원 관련 API")
public class MemberRestController {
private final MemberCommandUseCase memberCommandUseCase;
private final MemberTokenCommandUseCase memberTokenService;
private final KakaoOidcService kakaoOidcService;
@PostMapping("/auth/kko")
@Operation(summary = "KAKAO OAuth2 로그인 API", description = "KAKAO OAuth2 로그인 API 입니다.")
public ResponseEntity<ApiResponse<MemberResponseDTO.KkoOAuth2LoginResponse>> kkoOAuth2Login (@Valid @RequestBody MemberRequestDTO.KkoOAuth2LoginRequest request) {
// id_token 검증 후 멤버 데이터 추출
MemberDataDTO.MemberData kakaoMemberData = kakaoOidcService.verifyAndParseIdToken(request);
// id_token 에서 추출한 데이터를 통해 멤버 조회 OR 생성
Member findOrCreateMember = memberCommandUseCase.findOrCreateMember(kakaoMemberData, Provider.KAKAO);
// 토큰 생성 및 응답
return ResponseEntity.ok(ApiResponse.onSuccess(memberTokenService.generateKkoLoginToken(findOrCreateMember)));
}
@PostMapping("/agreements")
@Operation(summary = "약관 동의 API", description = "회원이 약관에 동의하는 API입니다.")
public ResponseEntity<ApiResponse<MemberResponseDTO.TermAgreementResponse>> termAgreement(
@RequestHeader(value = "Authorization", required = false) String authorization,
@Valid @RequestBody MemberRequestDTO.TermAgreementRequest request) {
return ResponseEntity.ok(ApiResponse.onSuccess(memberCommandUseCase.termAgreement(authorization, request)));
}
@PatchMapping("/signup")
@Operation(summary = "회원가입 완료 API", description = "회원의 추가 정보(닉네임, 사용자 커스텀 ID, 성별, 생년월일, 프로필 이미지)를 입력하여 회원가입을 완료하는 API입니다.")
public ResponseEntity<ApiResponse<MemberResponseDTO.MemberSignupResponse>> signup(
@RequestHeader(value = "Authorization", required = false) String authorization,
@Valid @RequestBody MemberRequestDTO.MemberSignupRequest request) {
return ResponseEntity.ok(ApiResponse.onSuccess(memberCommandUseCase.memberSignup(authorization, request)));
}
}