Skip to content

Commit

Permalink
feat: 로그인한 방법 조회하는 api 추가(#125)
Browse files Browse the repository at this point in the history
  • Loading branch information
hong-sile committed Aug 28, 2024
1 parent d1fe4e4 commit b83616c
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package play.pluv.login.application.dto;

import static play.pluv.playlist.domain.MusicStreaming.YOUTUBE;

import java.util.List;
import play.pluv.playlist.domain.MusicStreaming;

public record LoginTypeResponse(
String type
) {

public static LoginTypeResponse from(final MusicStreaming type) {
if (type == YOUTUBE) {
return new LoginTypeResponse("google");
}
return new LoginTypeResponse(type.getName());
}

public static List<LoginTypeResponse> createList(final List<MusicStreaming> types) {
return types.stream()
.map(LoginTypeResponse::from)
.toList();
}
}
10 changes: 10 additions & 0 deletions src/main/java/play/pluv/login/controller/LoginController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import static play.pluv.playlist.domain.MusicStreaming.YOUTUBE;

import jakarta.validation.Valid;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
Expand All @@ -14,7 +16,9 @@
import play.pluv.login.application.dto.AppleLoginRequest;
import play.pluv.login.application.dto.GoogleLoginRequest;
import play.pluv.login.application.dto.LoginResponse;
import play.pluv.login.application.dto.LoginTypeResponse;
import play.pluv.login.application.dto.SpotifyLoginRequest;
import play.pluv.playlist.domain.MusicStreaming;
import play.pluv.security.JwtMemberId;
import play.pluv.security.JwtProvider;

Expand Down Expand Up @@ -75,4 +79,10 @@ public BaseResponse<String> addAppleLoginWay(
loginService.addOtherLoginWay(APPLE, jwtMemberId.memberId(), loginRequest.idToken());
return BaseResponse.ok("");
}

@GetMapping("/login/type")
public BaseResponse<List<LoginTypeResponse>> getLoginType(final JwtMemberId jwtMemberId) {
final List<MusicStreaming> types = loginService.getLoginTypes(jwtMemberId.memberId());
return BaseResponse.ok(LoginTypeResponse.createList(types));
}
}
30 changes: 30 additions & 0 deletions src/test/java/play/pluv/api/LoginApiTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName;
import static org.springframework.restdocs.headers.HeaderDocumentation.requestHeaders;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint;
import static org.springframework.restdocs.payload.JsonFieldType.ARRAY;
import static org.springframework.restdocs.payload.JsonFieldType.NUMBER;
import static org.springframework.restdocs.payload.JsonFieldType.STRING;
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
Expand All @@ -20,6 +22,8 @@
import static play.pluv.playlist.domain.MusicStreaming.SPOTIFY;
import static play.pluv.playlist.domain.MusicStreaming.YOUTUBE;

import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
import play.pluv.login.application.dto.AppleLoginRequest;
import play.pluv.login.application.dto.GoogleLoginRequest;
Expand Down Expand Up @@ -197,4 +201,30 @@ public class LoginApiTest extends ApiTest {
)
));
}

@Test
void 연결한_소셜_계정확인하기() throws Exception {
final String token = "access Token";
final Long memberId = 10L;

setAccessToken(token, memberId);
when(loginService.getLoginTypes(memberId)).thenReturn(List.of(APPLE, YOUTUBE));

mockMvc.perform(get("/login/type")
.header(AUTHORIZATION, "Bearer " + token))
.andExpect(status().isOk())
.andDo(document("login-type",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint()),
requestHeaders(
headerWithName(AUTHORIZATION).description("Bearer Token")
),
responseFields(
fieldWithPath("code").type(NUMBER).description("상태 코드"),
fieldWithPath("msg").type(STRING).description("상태 코드에 해당하는 메시지"),
fieldWithPath("data[]").type(ARRAY).description("로그인 방법 목록"),
fieldWithPath("data[].type").type(STRING).description("유저가 등록한 로그인 방법")
)
));
}
}

0 comments on commit b83616c

Please sign in to comment.