Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package org.sopt.confeti.api.auth.controller;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.sopt.confeti.api.auth.controller.docs.AuthControllerV4Docs;
import org.sopt.confeti.api.auth.dto.request.LoginRequest;
import org.sopt.confeti.api.auth.facade.AuthFacade;
import org.sopt.confeti.auth.Token;
import org.sopt.confeti.auth.command.LoginCommand;
import org.sopt.confeti.auth.dto.LoginResult;
import org.sopt.confeti.domain.user.constant.Role;
import org.sopt.confeti.global.annotation.Permission;
import org.sopt.confeti.global.annotation.RefreshToken;
import org.sopt.confeti.global.annotation.UserId;
import org.sopt.confeti.global.common.BaseResponse;
import org.sopt.confeti.global.message.SuccessMessage;
import org.sopt.confeti.global.util.ApiResponseUtil;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
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;


@RestController
@RequiredArgsConstructor
@RequestMapping("/auth/v4")
public class AuthControllerV4 implements AuthControllerV4Docs {

private final AuthFacade authFacade;

@PostMapping("/login")
public ResponseEntity<BaseResponse<LoginResult>> login(
@Valid @RequestBody LoginRequest request
) {
LoginResult result = authFacade.login(LoginCommand.from(request));
return ApiResponseUtil.success(SuccessMessage.SUCCESS, result);
}

@Permission(role = {Role.ONBOARDING, Role.GENERAL})
@PostMapping("/reissue")
public ResponseEntity<BaseResponse<Token>> reissue(
@RefreshToken String refreshToken
) {
Token token = authFacade.reissue(refreshToken);
return ApiResponseUtil.success(SuccessMessage.SUCCESS, token);
}

@Permission(role = {Role.ONBOARDING, Role.GENERAL})
@PostMapping("/logout")
public ResponseEntity<BaseResponse<Void>> logout(@UserId Long userId) {
authFacade.logout(userId);
return ApiResponseUtil.success(SuccessMessage.SUCCESS);
}

/**
* 개발을 위해 임시로 Role.GENERAL 접근 허용
*/
@Permission(role = {Role.ONBOARDING, Role.GENERAL})
@PostMapping("/onboard")
public ResponseEntity<BaseResponse<Void>> onboard(
@UserId Long userId
) {
authFacade.onboard(userId);
authFacade.flushCachedTopArtists(userId);
return ApiResponseUtil.success(SuccessMessage.SUCCESS);
}

@Permission(role = {Role.GENERAL})
@DeleteMapping("/withdraw")
public ResponseEntity<BaseResponse<Void>> withdraw(
@UserId Long userId
) {
authFacade.withdraw(userId);
return ApiResponseUtil.success(SuccessMessage.SUCCESS);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package org.sopt.confeti.api.auth.controller.docs;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.sopt.confeti.global.annotation.UserId;
import org.sopt.confeti.global.common.BaseResponse;
import org.sopt.confeti.global.common.swagger.AuthErrorResponses;
import org.sopt.confeti.global.common.swagger.CommonErrorResponses;
import org.springframework.http.ResponseEntity;

@Tag(name = "인증")
public interface AuthControllerV4Docs {

@Operation(
summary = "회원가입한 유저의 온보딩 완료 요청",
description =
"""
V4 변경사항
- RequestBody 로 favoriteArtistId 목록을 받아서 처리하던 부분이 사라짐
- 서버에서 내부적으로 온보딩 시 사용된 favoriteArtistId 를 관리하므로 해당 데이터를 사용해 온보딩 완료 로직을 진행함
"""
)
@ApiResponses(
value = {
@ApiResponse(
responseCode = "200",
description = "성공"
)
}
)
@CommonErrorResponses
@AuthErrorResponses
ResponseEntity<BaseResponse<Void>> onboard(
@UserId Long userId
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import java.util.List;

@Deprecated
public record OnboardRequest(
List<OnboardArtistRequest> favoriteArtists
List<OnboardArtistRequest> favoriteArtists
) {

}
17 changes: 15 additions & 2 deletions src/main/java/org/sopt/confeti/api/auth/facade/AuthFacade.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import lombok.extern.slf4j.Slf4j;
import org.sopt.confeti.api.auth.facade.dto.request.OnboardArtistDTO;
import org.sopt.confeti.api.auth.facade.dto.request.OnboardDTO;
import org.sopt.confeti.api.user.facade.dto.response.onboard.UserOnboardCacheDTO;
import org.sopt.confeti.auth.LoginService;
import org.sopt.confeti.auth.LogoutService;
import org.sopt.confeti.auth.OnboardService;
Expand Down Expand Up @@ -68,18 +69,30 @@ public void logout(Long userId) {
logoutService.logout(userId);
}

@Deprecated
@Transactional
public void onboard(long userId, OnboardDTO onboardDTO) {
User user = userService.findById(userId);
Set<String> favoriteArtistIds = onboardDTO.favoriteArtists().stream()
.map(OnboardArtistDTO::artistId)
.collect(Collectors.toSet());
.map(OnboardArtistDTO::artistId)
.collect(Collectors.toSet());

onboardService.validateFavoriteArtistCount(favoriteArtistIds);
artistFavoriteService.addFavorites(user, favoriteArtistIds);
user.setRole(Role.GENERAL);
}

@Transactional
public void onboard(long userId) {
UserOnboardCacheDTO cachedArtists = userOnboardService.getCachedArtists(userId);
Set<String> favoriteArtistIds = cachedArtists.favoriteArtistIds();
User user = userService.findById(userId);

artistFavoriteService.addFavorites(user, favoriteArtistIds);
user.setRole(Role.GENERAL);
}


public void flushCachedTopArtists(long userId) {
userOnboardService.flushCachedTopArtists(userId);
}
Expand Down