From fea2b8bbd89246ae5ec1120bff0a01ad5d2da85b Mon Sep 17 00:00:00 2001 From: hoon7566 Date: Fri, 4 Feb 2022 22:15:16 +0900 Subject: [PATCH] feat(owner-frontend, category): MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - category list얻어오는 로직 추가. - owner frontend에서 카테고리 모달 눌렀을 시 category list 얻어오고 draw하는 기능 추가. --- .../category/web/CategoryController.java | 14 ++ .../templates/domain/category/category.html | 171 ++++++++++++++++++ .../resources/templates/layouts/layout.html | 1 + .../domain/category/dto/CategoryDto.java | 31 ++++ .../domain/category/entity/Category.java | 4 +- .../repository/CategoryRepository.java | 13 ++ .../category/service/CategoryService.java | 28 +++ .../category/web/CategoryController.java | 50 +++++ .../exception/FeignClientException.java | 12 ++ .../FeignClientExceptionErrorDecoder.java | 38 ++++ .../client/user/GetCustomerResponse.java | 10 + .../global/client/user/UserClient.java | 13 ++ .../global/config/FeignClientConfig.java | 14 ++ .../global/config/QueryDslConfig.java | 22 +++ .../src/main/resources/application.yml | 2 +- 15 files changed, 420 insertions(+), 3 deletions(-) create mode 100644 owner-frontend-service/src/main/java/com/justpickup/ownerfrontendservice/domain/category/web/CategoryController.java create mode 100644 owner-frontend-service/src/main/resources/templates/domain/category/category.html create mode 100644 store-service/src/main/java/com/justpickup/storeservice/domain/category/dto/CategoryDto.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/domain/category/repository/CategoryRepository.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/domain/category/service/CategoryService.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/domain/category/web/CategoryController.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/global/client/exception/FeignClientException.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/global/client/exception/FeignClientExceptionErrorDecoder.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/global/client/user/GetCustomerResponse.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/global/client/user/UserClient.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/global/config/FeignClientConfig.java create mode 100644 store-service/src/main/java/com/justpickup/storeservice/global/config/QueryDslConfig.java diff --git a/owner-frontend-service/src/main/java/com/justpickup/ownerfrontendservice/domain/category/web/CategoryController.java b/owner-frontend-service/src/main/java/com/justpickup/ownerfrontendservice/domain/category/web/CategoryController.java new file mode 100644 index 0000000..cfc2ca9 --- /dev/null +++ b/owner-frontend-service/src/main/java/com/justpickup/ownerfrontendservice/domain/category/web/CategoryController.java @@ -0,0 +1,14 @@ +package com.justpickup.ownerfrontendservice.domain.category.web; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class CategoryController { + + @GetMapping("/category") + public String category(){ + + return "/domain/category/category"; + } +} diff --git a/owner-frontend-service/src/main/resources/templates/domain/category/category.html b/owner-frontend-service/src/main/resources/templates/domain/category/category.html new file mode 100644 index 0000000..ffd3d53 --- /dev/null +++ b/owner-frontend-service/src/main/resources/templates/domain/category/category.html @@ -0,0 +1,171 @@ + + + + + + +
+ + +

category

+

버튼을 눌러 카테고리 등록

+ + + + + + + + + +
+ + + \ No newline at end of file diff --git a/owner-frontend-service/src/main/resources/templates/layouts/layout.html b/owner-frontend-service/src/main/resources/templates/layouts/layout.html index bab8ff6..9fe8b24 100644 --- a/owner-frontend-service/src/main/resources/templates/layouts/layout.html +++ b/owner-frontend-service/src/main/resources/templates/layouts/layout.html @@ -44,6 +44,7 @@ + diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/category/dto/CategoryDto.java b/store-service/src/main/java/com/justpickup/storeservice/domain/category/dto/CategoryDto.java new file mode 100644 index 0000000..5f7bbaa --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/category/dto/CategoryDto.java @@ -0,0 +1,31 @@ +package com.justpickup.storeservice.domain.category.dto; + +import com.justpickup.storeservice.domain.category.entity.Category; +import com.justpickup.storeservice.domain.item.entity.Item; +import com.justpickup.storeservice.domain.store.entity.Store; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CategoryDto { + + private String name; + private Integer order; + private Store store; + private List items; + + public CategoryDto(Category category) { + this.name = category.getName(); + this.order = category.getOrder(); + this.store = category.getStore(); + this.items = category.getItems(); + this.name = category.getName(); + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/category/entity/Category.java b/store-service/src/main/java/com/justpickup/storeservice/domain/category/entity/Category.java index 7d8ceac..742e6b7 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/category/entity/Category.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/category/entity/Category.java @@ -8,7 +8,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; - import java.util.List; import static javax.persistence.FetchType.LAZY; @@ -24,7 +23,8 @@ public class Category extends BaseEntity { private String name; - private Integer orders; + @Column(name = "orders") + private Integer order; @ManyToOne(fetch = LAZY) @JoinColumn(name = "store_id") diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/category/repository/CategoryRepository.java b/store-service/src/main/java/com/justpickup/storeservice/domain/category/repository/CategoryRepository.java new file mode 100644 index 0000000..2cace37 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/category/repository/CategoryRepository.java @@ -0,0 +1,13 @@ +package com.justpickup.storeservice.domain.category.repository; + +import com.justpickup.storeservice.domain.category.entity.Category; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface CategoryRepository extends JpaRepository { + + List findAllByStoreIdOrderByOrder(Long storeId); +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/category/service/CategoryService.java b/store-service/src/main/java/com/justpickup/storeservice/domain/category/service/CategoryService.java new file mode 100644 index 0000000..07b4453 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/category/service/CategoryService.java @@ -0,0 +1,28 @@ +package com.justpickup.storeservice.domain.category.service; + +import com.justpickup.storeservice.domain.category.dto.CategoryDto; +import com.justpickup.storeservice.domain.category.repository.CategoryRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@Slf4j +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class CategoryService { + + private final CategoryRepository categoryRepository; + + public List getCategoryList(Long storeId){ + + return categoryRepository.findAllByStoreIdOrderByOrder(storeId) + .stream() + .map(CategoryDto::new) + .collect(Collectors.toList()); + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/category/web/CategoryController.java b/store-service/src/main/java/com/justpickup/storeservice/domain/category/web/CategoryController.java new file mode 100644 index 0000000..6271ed5 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/category/web/CategoryController.java @@ -0,0 +1,50 @@ +package com.justpickup.storeservice.domain.category.web; + +import com.justpickup.storeservice.domain.category.dto.CategoryDto; +import com.justpickup.storeservice.domain.category.service.CategoryService; +import com.justpickup.storeservice.global.dto.Result; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequiredArgsConstructor +@Slf4j +public class CategoryController { + + private final CategoryService categoryService; + + @GetMapping("/category") + public ResponseEntity getCategoryList( ){ + Long storeId = 1L; + List categoryList = categoryService.getCategoryList(storeId); + + List categoryResponseList = categoryList.stream() + .map(CategoryResponse::new) + .collect(Collectors.toList()); + + + return ResponseEntity.status(HttpStatus.OK) + .body(Result.createSuccessResult(categoryResponseList)); + } + + + @Data + static class CategoryResponse{ + private String name; + private Integer order; + + public CategoryResponse (CategoryDto categoryDto){ + this.name= categoryDto.getName(); + this.order= categoryDto.getOrder(); + } + } + +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/client/exception/FeignClientException.java b/store-service/src/main/java/com/justpickup/storeservice/global/client/exception/FeignClientException.java new file mode 100644 index 0000000..921ba6f --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/client/exception/FeignClientException.java @@ -0,0 +1,12 @@ +package com.justpickup.storeservice.global.client.exception; + + +import com.justpickup.storeservice.global.exception.CustomException; +import org.springframework.http.HttpStatus; + +public class FeignClientException extends CustomException { + + public FeignClientException(HttpStatus status, String message) { + super(status, message); + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/client/exception/FeignClientExceptionErrorDecoder.java b/store-service/src/main/java/com/justpickup/storeservice/global/client/exception/FeignClientExceptionErrorDecoder.java new file mode 100644 index 0000000..0284355 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/client/exception/FeignClientExceptionErrorDecoder.java @@ -0,0 +1,38 @@ +package com.justpickup.storeservice.global.client.exception; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.justpickup.storeservice.global.dto.Result; +import feign.Response; +import feign.codec.ErrorDecoder; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +@RequiredArgsConstructor +@Slf4j +public class FeignClientExceptionErrorDecoder implements ErrorDecoder { + + private final ObjectMapper objectMapper; + + @Override + public Exception decode(String methodKey, Response response) { + String message = null; + if (response.body() != null) { + try { + Result result = objectMapper.readValue(response.body().asInputStream(), Result.class); + message = result.getMessage(); + } catch (IOException e) { + String catchErrorMessage = "Error Deserializing response body from failed feign request response."; + log.warn(methodKey + catchErrorMessage, e); + + return new FeignClientException(HttpStatus.INTERNAL_SERVER_ERROR, "고객센터로 문의해주세요."); + } + } + + return new FeignClientException(HttpStatus.INTERNAL_SERVER_ERROR, message); + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/client/user/GetCustomerResponse.java b/store-service/src/main/java/com/justpickup/storeservice/global/client/user/GetCustomerResponse.java new file mode 100644 index 0000000..b86995d --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/client/user/GetCustomerResponse.java @@ -0,0 +1,10 @@ +package com.justpickup.storeservice.global.client.user; + +import lombok.Data; + +@Data +public class GetCustomerResponse { + private Long userId; + private String userName; + private String phoneNumber; +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/client/user/UserClient.java b/store-service/src/main/java/com/justpickup/storeservice/global/client/user/UserClient.java new file mode 100644 index 0000000..941b739 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/client/user/UserClient.java @@ -0,0 +1,13 @@ +package com.justpickup.storeservice.global.client.user; + +import com.justpickup.storeservice.global.dto.Result; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient(name = "USER-SERVICE", url = "127.0.0.1:8001/user-service") +public interface UserClient { + + @GetMapping("/customer/{userId}") + Result getUser(@PathVariable("userId") Long userId); +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/config/FeignClientConfig.java b/store-service/src/main/java/com/justpickup/storeservice/global/config/FeignClientConfig.java new file mode 100644 index 0000000..95b0886 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/config/FeignClientConfig.java @@ -0,0 +1,14 @@ +package com.justpickup.storeservice.global.config; + +import feign.Logger; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class FeignClientConfig { + + @Bean + public Logger.Level feignLoggerLevel() { + return Logger.Level.FULL; + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/config/QueryDslConfig.java b/store-service/src/main/java/com/justpickup/storeservice/global/config/QueryDslConfig.java new file mode 100644 index 0000000..648d20a --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/config/QueryDslConfig.java @@ -0,0 +1,22 @@ +package com.justpickup.storeservice.global.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +@Configuration +@EnableJpaAuditing +public class QueryDslConfig { + + @PersistenceContext + private EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(this.entityManager); + } +} diff --git a/store-service/src/main/resources/application.yml b/store-service/src/main/resources/application.yml index 0636d57..9f0efbc 100644 --- a/store-service/src/main/resources/application.yml +++ b/store-service/src/main/resources/application.yml @@ -7,7 +7,7 @@ spring: jpa: hibernate: - ddl-auto: create-drop + ddl-auto: validate properties: hibernate: format_sql: true