-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAuthController.java
More file actions
94 lines (81 loc) · 4.11 KB
/
Copy pathAuthController.java
File metadata and controls
94 lines (81 loc) · 4.11 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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package com.sluv.api.auth.controller;
import com.sluv.api.auth.dto.request.AuthRequest;
import com.sluv.api.auth.dto.request.AutoLoginRequest;
import com.sluv.api.auth.dto.response.AuthResponse;
import com.sluv.api.auth.dto.response.AutoLoginResponse;
import com.sluv.api.auth.service.AppleUserService;
import com.sluv.api.auth.service.AuthService;
import com.sluv.api.auth.service.GoogleUserService;
import com.sluv.api.auth.service.KakaoUserService;
import com.sluv.api.common.response.SuccessDataResponse;
import com.sluv.api.common.response.SuccessResponse;
import com.sluv.common.annotation.CurrentUserId;
import com.sluv.domain.auth.enums.SnsType;
import com.sluv.domain.user.entity.User;
import com.sluv.infra.counter.visit.VisitCounter;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.lang.Nullable;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/app/auth")
@RequiredArgsConstructor
public class AuthController {
private final KakaoUserService kakaoUserService;
private final GoogleUserService googleUserService;
private final AppleUserService appleUserService;
private final AuthService authService;
private final VisitCounter visitCounter;
@Operation(summary = "소셜 로그인", description = "KAKAO:[AccessToken], GOOGLE, APPLE: [IdToken]")
@PostMapping("/social-login")
public ResponseEntity<SuccessDataResponse<AuthResponse>> socialLogin(@RequestBody AuthRequest request)
throws Exception {
User loginUser = null;
SnsType userSnsType = SnsType.fromString(request.getSnsType());
switch (userSnsType) {
case KAKAO -> loginUser = kakaoUserService.kakaoLogin(request);
case GOOGLE -> loginUser = googleUserService.googleLogin(request);
case APPLE -> loginUser = appleUserService.appleLogin(request);
}
visitCounter.countVisit(loginUser.getId());
AuthResponse response = authService.getAuthResDto(loginUser);
return ResponseEntity.ok().body(SuccessDataResponse.from(response));
}
@Deprecated
@Operation(summary = "*자동 로그인", description = "토큰 만료 시 error code : 4002")
@GetMapping("/auto-login")
public ResponseEntity<SuccessDataResponse<AutoLoginResponse>> autoLogin(@CurrentUserId Long userId) {
visitCounter.countVisit(userId);
User user = authService.findLogInUser(userId);
// authService.checkFcm(user);
AutoLoginResponse response = AutoLoginResponse.of(user);
return ResponseEntity.ok().body(SuccessDataResponse.from(response));
}
@Operation(summary = "*자동 로그인", description = "토큰 만료 시 error code : 4002")
@PostMapping("/auto-login")
public ResponseEntity<SuccessDataResponse<AutoLoginResponse>> autoLoginWithFcm(@CurrentUserId Long userId,
@Nullable @RequestBody AutoLoginRequest request) {
visitCounter.countVisit(userId);
if (request != null) {
authService.changeFcm(userId, request.getFcm());
}
User user = authService.findLogInUser(userId);
// authService.checkFcm(user);
AutoLoginResponse response = AutoLoginResponse.of(user);
return ResponseEntity.ok().body(SuccessDataResponse.from(response));
}
@Operation(summary = "*FCM 토큰 갱신", description = "FCM 토큰을 갱신")
@PostMapping("/fcm")
public ResponseEntity<SuccessResponse> changeFcm(@CurrentUserId Long userId,
@RequestBody AutoLoginRequest dto) {
authService.changeFcm(userId, dto.getFcm());
return ResponseEntity.ok().body(SuccessResponse.create());
}
@Operation(summary = "*로그아웃", description = "사용자의 FCM 토큰 삭제")
@PostMapping("/logout")
public ResponseEntity<SuccessResponse> logout(@CurrentUserId Long userId) {
authService.logout(userId);
return ResponseEntity.ok().body(SuccessResponse.create());
}
}