Skip to content

Commit

Permalink
Feat: meal type으로 음식 조회가 되지 않는 경우 조회 실패 구현(404 NOT FOUND)
Browse files Browse the repository at this point in the history
  • Loading branch information
ku-kim committed Apr 22, 2022
1 parent db93682 commit 1e27697
Show file tree
Hide file tree
Showing 10 changed files with 73 additions and 79 deletions.
Expand Up @@ -5,7 +5,6 @@
import org.springframework.stereotype.Component;
import sidedish.com.controller.model.ProductMealTypeResponse;
import sidedish.com.domain.Product;
import sidedish.com.repository.entity.ProductEntity;

@Component
public class ProductsDtoMapper {
Expand All @@ -17,7 +16,6 @@ public List<ProductMealTypeResponse> toProductsMealTypeResponseFromDomain(
.collect(Collectors.toList());
}


private ProductMealTypeResponse toProductMealTypeResponseFromDomain(
Product product) {
return new ProductMealTypeResponse(
Expand Down
@@ -0,0 +1,9 @@
package sidedish.com.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class NoSuchProductsException extends RuntimeException {

}
@@ -1,26 +1,27 @@
package sidedish.com.repository.entity;

import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.PersistenceConstructor;
import org.springframework.data.relational.core.mapping.Table;

@Getter
@Setter
@Table("DISCOUNT_POLICY")
public class DiscountPolicyEntity {

@Id
private Long id;
private String policyName;
private float discountRate;
private final Long id;
private final String policyName;
private final float discountRate;

public DiscountPolicyEntity(String policyName) {
@PersistenceConstructor
public DiscountPolicyEntity(Long id, String policyName, float discountRate) {
this.id = id;
this.policyName = policyName;
this.discountRate = discountRate;
}

public boolean isEqualsId(Long id) {
return this.id == id;
return this.id.equals(id);
}
}
11 changes: 6 additions & 5 deletions BE/src/main/java/sidedish/com/repository/entity/ImageEntity.java
@@ -1,20 +1,21 @@
package sidedish.com.repository.entity;

import lombok.Getter;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.PersistenceConstructor;
import org.springframework.data.relational.core.mapping.Table;

@Getter
@Table("PRODUCT_IMAGE")
@ToString
public class ImageEntity {

@Id
private Long id;
private String imageUrl;
private final Long id;
private final String imageUrl;

public ImageEntity(String imageUrl) {
@PersistenceConstructor
public ImageEntity(Long id, String imageUrl) {
this.id = id;
this.imageUrl = imageUrl;
}
}
35 changes: 22 additions & 13 deletions BE/src/main/java/sidedish/com/repository/entity/ProductEntity.java
@@ -1,29 +1,38 @@
package sidedish.com.repository.entity;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.PersistenceConstructor;
import org.springframework.data.relational.core.mapping.MappedCollection;
import org.springframework.data.relational.core.mapping.Table;

@Getter
@ToString
@AllArgsConstructor

@Table("PRODUCT")
public class ProductEntity {

@Id
private Long id;
private Long discountPolicyId;
private final Long id;
private final Long discountPolicyId;
@MappedCollection(idColumn = "ID", keyColumn = "ID")
private List<ImageEntity> imageEntities;
private String productName;
private String description;
private long originalPrice;
private String mealCategory;
private String bestCategory;
private final List<ImageEntity> imageEntities;
private final String productName;
private final String description;
private final long originalPrice;
private final String mealCategory;
private final String bestCategory;

@PersistenceConstructor
public ProductEntity(Long id, Long discountPolicyId,
List<ImageEntity> imageEntities, String productName, String description, long originalPrice,
String mealCategory, String bestCategory) {
this.id = id;
this.discountPolicyId = discountPolicyId;
this.imageEntities = imageEntities;
this.productName = productName;
this.description = description;
this.originalPrice = originalPrice;
this.mealCategory = mealCategory;
this.bestCategory = bestCategory;
}
}
16 changes: 11 additions & 5 deletions BE/src/main/java/sidedish/com/service/ProductsService.java
@@ -1,16 +1,13 @@
package sidedish.com.service;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.springframework.stereotype.Service;
import sidedish.com.controller.ProductsDtoMapper;
import sidedish.com.controller.model.ProductMealTypeResponse;
import sidedish.com.domain.Product;
import sidedish.com.repository.DomainEntityMapper;
import sidedish.com.repository.entity.DiscountPolicyEntity;
import sidedish.com.repository.entity.ProductEntity;
import sidedish.com.exception.NoSuchProductsException;
import sidedish.com.repository.DiscountPolicyRepository;
import sidedish.com.repository.DomainEntityMapper;
import sidedish.com.repository.ProductsRepository;

@Service
Expand All @@ -35,6 +32,15 @@ public List<ProductMealTypeResponse> findByMealType(String meal) {
List<Product> products = domainEntityMapper.toDomainFromProductsEntity(
productsRepository.findByMealType(meal),
discountPolicyRepository.findAll());

validProducts(products);

return productsDtoMapper.toProductsMealTypeResponseFromDomain(products);
}

private void validProducts(List<Product> products) {
if (products.isEmpty()) {
throw new NoSuchProductsException();
}
}
}
Expand Up @@ -6,6 +6,7 @@

import io.restassured.RestAssured;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
Expand All @@ -30,6 +31,7 @@
*/

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@DisplayName("Product 인수테스트")
class ProductsAcceptanceTest {

@LocalServerPort
Expand Down Expand Up @@ -60,4 +62,16 @@ void setUp() {
.body("[0].originalPrice", equalTo(9300))
.body("[0].event", equalTo("이벤트특가"));
}

@Test
void 만약_meal_type_유효하지_않은_경우_음식_타입_조회_실패() {
given()
.accept(MediaType.APPLICATION_JSON_VALUE)

.when()
.get("/api/products?meal=WrongType")

.then()
.statusCode(HttpStatus.NOT_FOUND.value());
}
}
Expand Up @@ -22,7 +22,7 @@
import sidedish.com.service.ProductsService;

@WebMvcTest(ProductsController.class)
@DisplayName("ProductsControllerTest 클래스")
@DisplayName("ProductsController 클래스")
class ProductsControllerTest {

@Autowired
Expand Down
2 changes: 1 addition & 1 deletion BE/src/test/java/sidedish/com/domain/ProductTest.java
Expand Up @@ -7,7 +7,7 @@
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

@DisplayName("ProductTest 클래스")
@DisplayName("Product 클래스")
class ProductTest {


Expand Down
44 changes: 0 additions & 44 deletions BE/src/test/java/sidedish/com/service/ProductsServiceTest.java

This file was deleted.

0 comments on commit 1e27697

Please sign in to comment.