From a3e0a3d6e95e79be452eacce928d02db7e2f4040 Mon Sep 17 00:00:00 2001 From: hoon7566 Date: Wed, 16 Mar 2022 19:50:43 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix(customer-vue):=20mypage=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - customer mypage 개발 --- customer-vue/src/api/user.js | 3 + .../src/components/BottomNavigation.vue | 9 +- customer-vue/src/router/router.js | 15 ++++ customer-vue/src/views/MyPage.vue | 88 +++++++++++++++++++ .../userservice/domain/user/dto/UserDto.java | 1 + .../domain/user/web/UserController.java | 27 ++++++ 6 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 customer-vue/src/views/MyPage.vue diff --git a/customer-vue/src/api/user.js b/customer-vue/src/api/user.js index 7eb0b07..c366a01 100644 --- a/customer-vue/src/api/user.js +++ b/customer-vue/src/api/user.js @@ -5,6 +5,9 @@ export default { requestRegisterUser(user) { return axios.post(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL+"/user-service/store-owner", user); }, + geUserData() { + return axios.get(process.env.VUE_APP_CUSTOMER_SERVICE_BASEURL+"/user-service/customer/", ); + }, async requestLoginUser(email, password) { const user = { diff --git a/customer-vue/src/components/BottomNavigation.vue b/customer-vue/src/components/BottomNavigation.vue index b1fb176..f1b4432 100644 --- a/customer-vue/src/components/BottomNavigation.vue +++ b/customer-vue/src/components/BottomNavigation.vue @@ -24,7 +24,7 @@ export default { {name: "검색", url: "/search", icon: "mdi-magnify"}, {name: "즐겨찾기", url: "/favorite", icon: "mdi-cards-heart-outline"}, {name: "주문내역", url: "/history", icon: "mdi-clipboard-check-outline"}, - {name: "마이페이지", url: "/", icon: "mdi-account-outline"} + {name: "마이페이지", url: "/mypage", icon: "mdi-account-outline"} ] } }, @@ -33,6 +33,13 @@ export default { this.value = index; this.$router.push(url); } + },mounted() { + const path =this.$route.path + this.links.forEach((link, index) => { + if(link.url === path){ + this.value = index + } + }) } } diff --git a/customer-vue/src/router/router.js b/customer-vue/src/router/router.js index a3afd88..ba0585d 100644 --- a/customer-vue/src/router/router.js +++ b/customer-vue/src/router/router.js @@ -37,44 +37,58 @@ const routes = [ children: [ { path: "/home", + beforeEnter: authCheck, name: 'home', component: () => import('../views/HomeView') }, { path: "/search", + beforeEnter: authCheck, name: 'search-store', component: () => import('../views/SearchStore') }, { path: "/history", + beforeEnter: authCheck, name: 'order-history', component: () => import('../views/OrderHistory') }, { path: "/favorite", + beforeEnter: authCheck, name: 'favorite-store', component: () => import('../views/FavoriteStore') }, { path: "/notification", + beforeEnter: authCheck, name: 'notification', component: () => import('../views/NotificationView') }, { path: '/login', + beforeEnter: authCheck, name: 'login', component: () => import('../views/LoginPage') }, { path: "/item/:itemId", + beforeEnter: authCheck, name: 'itemDetail', component: () => import('../views/ItemDetail') }, { path: "/order", + beforeEnter: authCheck, name: 'orderPage', component: () => import('../views/OrderPage') }, + { + path: "/mypage", + beforeEnter: authCheck, + name: 'myPage', + component: () => import('../views/MyPage') + }, ] }, { @@ -86,6 +100,7 @@ const routes = [ { path: "/store/:storeId", name: "store", + beforeEnter: authCheck, component: () => import('../views/StoreView'), props: true }, diff --git a/customer-vue/src/views/MyPage.vue b/customer-vue/src/views/MyPage.vue new file mode 100644 index 0000000..268d115 --- /dev/null +++ b/customer-vue/src/views/MyPage.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/UserDto.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/UserDto.java index f3aa62e..dbb65d9 100644 --- a/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/UserDto.java +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/UserDto.java @@ -16,6 +16,7 @@ public abstract class UserDto { // == 생성 메소드 == // public UserDto(Customer customer) { this.id = customer.getId(); + this.email = customer.getEmail(); this.password = customer.getPassword(); this.name = customer.getName(); this.phoneNumber = customer.getPhoneNumber(); diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/web/UserController.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/web/UserController.java index 377a1bb..1525635 100644 --- a/user-service/src/main/java/com/justpickup/userservice/domain/user/web/UserController.java +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/web/UserController.java @@ -24,6 +24,33 @@ public class UserController { private final UserService userService; + @GetMapping("/customer/") + public ResponseEntity getCustomerByToken(@Valid @RequestHeader(value = "user-id") String userId ) { + + CustomerDto customerDto = userService.findCustomerByUserId(Long.parseLong(userId)); + + GetCustomerByTokenResponse getCustomerByTokenResponse = new GetCustomerByTokenResponse(customerDto); + + return ResponseEntity.status(HttpStatus.OK) + .body(Result.createSuccessResult(getCustomerByTokenResponse)); + } + + @Data @NoArgsConstructor @AllArgsConstructor + static class GetCustomerByTokenResponse { + private Long userId; + private String email; + private String userName; + private String phoneNumber; + + public GetCustomerByTokenResponse(CustomerDto customerDto) { + this.userId = customerDto.getId(); + this.email = customerDto.getEmail(); + this.userName = customerDto.getName(); + this.phoneNumber = customerDto.getPhoneNumber(); + } + } + + @GetMapping("/customer/{userId}") public ResponseEntity getCustomer(@Valid @PathVariable("userId") Long userId) { From 5fc4bd434ee997d37d1f504882a33fe4e1f428c5 Mon Sep 17 00:00:00 2001 From: hoon7566 Date: Wed, 16 Mar 2022 20:01:03 +0900 Subject: [PATCH 2/2] =?UTF-8?q?test(user-service):=20user-service=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - mypage 정보 가져오는 테스트코드 작성 --- user-service/src/docs/asciidoc/api-docs.adoc | 2 + .../domain/user/web/UserControllerTest.java | 50 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/user-service/src/docs/asciidoc/api-docs.adoc b/user-service/src/docs/asciidoc/api-docs.adoc index 8bb36ad..9204d08 100644 --- a/user-service/src/docs/asciidoc/api-docs.adoc +++ b/user-service/src/docs/asciidoc/api-docs.adoc @@ -65,6 +65,8 @@ domain-httpRequestCode-etc == 유저 +=== 로그인 된 회원 조회 +operation::customer-get-mypage[snippets='curl-request,http-request,http-response,request-headers,response-fields'] === 회원 조회 operation::customer-get[snippets='curl-request,http-request,http-response,path-parameters,response-fields'] === 회원 조회 (존재하지 않는 회원) diff --git a/user-service/src/test/java/com/justpickup/userservice/domain/user/web/UserControllerTest.java b/user-service/src/test/java/com/justpickup/userservice/domain/user/web/UserControllerTest.java index 93c2c3d..7f7648a 100644 --- a/user-service/src/test/java/com/justpickup/userservice/domain/user/web/UserControllerTest.java +++ b/user-service/src/test/java/com/justpickup/userservice/domain/user/web/UserControllerTest.java @@ -21,12 +21,15 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.FilterType; import org.springframework.context.annotation.Import; import org.springframework.http.MediaType; +import org.springframework.restdocs.headers.HeaderDocumentation; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.willThrow; +import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; +import static org.springframework.restdocs.headers.HeaderDocumentation.requestHeaders; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; @@ -58,6 +61,53 @@ class UserControllerTest { @SpyBean CookieProvider cookieProvider; + @Test + @DisplayName("로그인된 회원 조회") + void getCustomerByToken() throws Exception { + // GIVEN + long userId = 1L; + + CustomerDto willReturnDto = CustomerDto.builder() + .id(1L) + .name("이름") + .password("password!@#") + .email("hoonasdasd@naver.com") + .phoneNumber("010-1234-5678") + .build(); + + given(userService.findCustomerByUserId(userId)) + .willReturn(willReturnDto); + + // WHEN + ResultActions actions = mockMvc.perform(get("/customer/") + .header("user-id",userId)); + + // THEN + actions.andExpect(status().isOk()) + .andExpect(jsonPath("code").value(Code.SUCCESS.name())) + .andExpect(jsonPath("message").value("")) + .andExpect(jsonPath("data.userId").value(1)) + .andExpect(jsonPath("data.email").value("hoonasdasd@naver.com")) + .andExpect(jsonPath("data.userName").value("이름")) + .andExpect(jsonPath("data.phoneNumber").value("010-1234-5678")) + .andDo(print()) + .andDo(document("customer-get-mypage", + requestHeaders( + headerWithName("user-id").description("로그인한 유저 id") + ), + responseFields( + fieldWithPath("code").description("결과코드 SUCCESS/ERROR"), + fieldWithPath("message").description("메시지"), + fieldWithPath("data.userId").description("회원 고유번호"), + fieldWithPath("data.userName").description("회원 이름"), + fieldWithPath("data.email").description("회원 이메일"), + fieldWithPath("data.phoneNumber").description("회원 휴대폰 번호") + )) + ) + ; + } + + @Test @DisplayName("회원 조회") void getCustomer() throws Exception {