fix: 오류 수정

- 예약 물품 조회 시 인터넷 예약만 조회됨 -> 모든 예약물품 조회
This commit is contained in:
shinmj
2021-12-30 21:54:41 +09:00
parent 5348bcfe92
commit e57fdea7a3
5 changed files with 73 additions and 36 deletions

View File

@@ -32,6 +32,7 @@ public class ReserveItemRequestDto extends RequestDto {
private Long locationId; private Long locationId;
private String categoryId; private String categoryId;
private Boolean isUse; private Boolean isUse;
private Boolean isPopup;
public boolean hasLocationId() { public boolean hasLocationId() {
return hasId(locationId); return hasId(locationId);
@@ -44,4 +45,8 @@ public class ReserveItemRequestDto extends RequestDto {
private boolean hasId(Object id) { private boolean hasId(Object id) {
return Objects.nonNull(id) && !Objects.equals("null", id) && !Objects.equals("undefined", id); return Objects.nonNull(id) && !Objects.equals("null", id) && !Objects.equals("undefined", id);
} }
public boolean isPopup() {
return Boolean.TRUE.equals(isPopup);
}
} }

View File

@@ -3,6 +3,12 @@ package org.egovframe.cloud.reserveitemservice.domain.reserveItem;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.Queue;
import java.util.stream.Collectors;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
import lombok.Builder; import lombok.Builder;
@@ -11,6 +17,7 @@ import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import org.egovframe.cloud.reactive.domain.BaseEntity; import org.egovframe.cloud.reactive.domain.BaseEntity;
import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemUpdateRequestDto; import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemUpdateRequestDto;
import org.egovframe.cloud.reserveitemservice.domain.code.Code;
import org.egovframe.cloud.reserveitemservice.domain.location.Location; import org.egovframe.cloud.reserveitemservice.domain.location.Location;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
@@ -271,6 +278,13 @@ public class ReserveItem extends BaseEntity {
return this; return this;
} }
public List<String> getRelationCodeIds() {
return Arrays.asList(categoryId, reserveMethodId, reserveMeansId, selectionMeansId, targetId)
.stream()
.filter(it -> Objects.nonNull(it))
.collect(Collectors.toList());
}
/** /**
* 예약 물품 정보 업데이트 * 예약 물품 정보 업데이트
@@ -397,6 +411,28 @@ public class ReserveItem extends BaseEntity {
private int calcInventoryQty(int reserveQty) { private int calcInventoryQty(int reserveQty) {
return inventoryQty - reserveQty; return inventoryQty - reserveQty;
} }
public void setCodeName(List<Code> codes) {
codes.stream().filter(it -> it.getParentCodeId().equals("reserve-category"))
.findFirst()
.ifPresent(it -> setCategoryName(it.getCodeName()));
codes.stream().filter(it -> it.getParentCodeId().equals("reserve-method"))
.findFirst()
.ifPresent(it -> setReserveMethodName(it.getCodeName()));
codes.stream().filter(it -> it.getParentCodeId().equals("reserve-means"))
.findFirst()
.ifPresent(it -> setReserveMeansName(it.getCodeName()));
codes.stream().filter(it -> it.getParentCodeId().equals("reserve-selection"))
.findFirst()
.ifPresent(it -> setSelectionMeansName(it.getCodeName()));
codes.stream().filter(it -> it.getParentCodeId().equals("reserve-target"))
.findFirst()
.ifPresent(it -> setTargetName(it.getCodeName()));
}
} }

View File

@@ -4,11 +4,13 @@ import static org.springframework.data.relational.core.query.Criteria.where;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemRequestDto; import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemRequestDto;
import org.egovframe.cloud.reserveitemservice.domain.code.Code; import org.egovframe.cloud.reserveitemservice.domain.code.Code;
import org.egovframe.cloud.reserveitemservice.domain.location.Location; import org.egovframe.cloud.reserveitemservice.domain.location.Location;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate; import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
@@ -98,8 +100,10 @@ public class ReserveItemRepositoryImpl implements ReserveItemRepositoryCustom{
*/ */
@Override @Override
public Flux<ReserveItem> findLatestByCategory(Integer count, String categoryId) { public Flux<ReserveItem> findLatestByCategory(Integer count, String categoryId) {
Query query =Query.query(where("category_id").is(categoryId) Query query = Query.query(
.and("use_at").isTrue()).sort(Sort.by(Sort.Order.desc(SORT_COLUMN))); where("category_id").is(categoryId)
.and("use_at").isTrue())
.sort(Sort.by(Sort.Order.desc(SORT_COLUMN)));
if (count > 0) { if (count > 0) {
query.limit(count); query.limit(count);
@@ -152,19 +156,16 @@ public class ReserveItemRepositoryImpl implements ReserveItemRepositoryCustom{
* @return * @return
*/ */
private Mono<ReserveItem> loadRelationsAll(final ReserveItem reserveItem) { private Mono<ReserveItem> loadRelationsAll(final ReserveItem reserveItem) {
//load common code
Mono<ReserveItem> mono = Mono.just(reserveItem) Mono<ReserveItem> mono = findCode(reserveItem.getRelationCodeIds())
.zipWith(findCodeById(reserveItem.getCategoryId())) .collectList()
.map(tuple -> tuple.getT1().setCategoryName(tuple.getT2().getCodeName())) .zipWith(Mono.just(reserveItem))
.zipWith(findCodeById(reserveItem.getReserveMethodId())) .map(tuple -> {
.map(tuple -> tuple.getT1().setReserveMethodName(tuple.getT2().getCodeName())) ReserveItem item = tuple.getT2();
.zipWith(findCodeById(reserveItem.getReserveMeansId())) List<Code> codes = tuple.getT1();
.map(tuple -> tuple.getT1().setReserveMeansName(tuple.getT2().getCodeName())) item.setCodeName(codes);
.zipWith(findCodeById(reserveItem.getSelectionMeansId())) return item;
.map(tuple -> tuple.getT1().setSelectionMeansName(tuple.getT2().getCodeName())) }).switchIfEmpty(Mono.just(reserveItem));
.zipWith(findCodeById(reserveItem.getTargetId()))
.map(tuple -> tuple.getT1().setTargetName(tuple.getT2().getCodeName()))
.switchIfEmpty(Mono.just(reserveItem));
// load location // load location
mono = mono.zipWith(findLocationById(reserveItem.getLocationId())) mono = mono.zipWith(findLocationById(reserveItem.getLocationId()))
@@ -194,11 +195,16 @@ public class ReserveItemRepositoryImpl implements ReserveItemRepositoryCustom{
* @return * @return
*/ */
private Mono<Code> findCodeById(String codeId ) { private Mono<Code> findCodeById(String codeId ) {
return entityTemplate.select(Code.class) if (Objects.isNull(codeId)) {
.matching(Query.query(where("code_id").is(codeId))) return Mono.empty();
.one() }
return entityTemplate.selectOne(Query.query(where("code_id").is(codeId)), Code.class)
.switchIfEmpty(Mono.empty()); .switchIfEmpty(Mono.empty());
}
private Flux<Code> findCode(List<String> codeIds) {
return entityTemplate
.select(Query.query(where("code_id").in(codeIds)), Code.class);
} }
/** /**
@@ -226,9 +232,12 @@ public class ReserveItemRepositoryImpl implements ReserveItemRepositoryCustom{
whereCriteria.add(where("category_id").in(requestDto.getCategoryId())); whereCriteria.add(where("category_id").in(requestDto.getCategoryId()));
} }
// 물품 팝업에서 조회하는 경우 인터넷 예약이 가능한 물품만 조회
if (requestDto.getIsUse()) { if (requestDto.getIsUse()) {
whereCriteria.add(where("use_at").isTrue()); whereCriteria.add(where("use_at").isTrue());
}
// 물품 팝업에서 조회하는 경우 인터넷 예약이 가능한 물품만 조회
if (requestDto.isPopup()) {
whereCriteria.add(where("reserve_method_id").is("internet")); whereCriteria.add(where("reserve_method_id").is("internet"));
} }

View File

@@ -68,7 +68,7 @@ public class ReserveItemSaveValidator implements ConstraintValidator<ReserveItem
return validateInternet(value, context); return validateInternet(value, context);
} }
if ("telephone".equals(reserveMethodId)) { if ("phone".equals(reserveMethodId)) {
return validateTelephone(value, context); return validateTelephone(value, context);
} }
@@ -171,8 +171,7 @@ public class ReserveItemSaveValidator implements ConstraintValidator<ReserveItem
context.disableDefaultConstraintViolation(); context.disableDefaultConstraintViolation();
//문의처 값은 필수입니다. //문의처 값은 필수입니다.
context.buildConstraintViolationWithTemplate( context.buildConstraintViolationWithTemplate(
messageUtil.getMessage("reserve_item.contact") + messageUtil messageUtil.getMessage("reserve_item.contact") + messageUtil.getMessage("valid.required"))
.getMessage("valid.required"))
.addPropertyNode("contact") .addPropertyNode("contact")
.addConstraintViolation(); .addConstraintViolation();
return false; return false;

View File

@@ -1,19 +1,14 @@
package org.egovframe.cloud.reserveitemservice.api.reserveItem; package org.egovframe.cloud.reserveitemservice.api.reserveItem;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import org.egovframe.cloud.common.exception.dto.ErrorCode; import org.egovframe.cloud.common.exception.dto.ErrorCode;
import org.egovframe.cloud.common.exception.dto.ErrorResponse; import org.egovframe.cloud.common.exception.dto.ErrorResponse;
import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemMainResponseDto; import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemMainResponseDto;
import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemRequestDto;
import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemResponseDto; import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemResponseDto;
import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemSaveRequestDto; import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemSaveRequestDto;
import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemUpdateRequestDto; import org.egovframe.cloud.reserveitemservice.api.reserveItem.dto.ReserveItemUpdateRequestDto;
@@ -26,24 +21,17 @@ import org.egovframe.cloud.reserveitemservice.domain.reserveItem.ReserveItemRepo
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.ArgumentMatchers;
import org.mockito.BDDMockito;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.ParameterizedTypeReference;
import org.springframework.data.domain.Pageable;
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate; import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.TestPropertySource;
import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.test.web.reactive.server.WebTestClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@EnableConfigurationProperties @EnableConfigurationProperties