-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat: Food 도메인 작성 - Food 도메인 작성 - 하위 VO 작성 - 필요한 예외 등록 * feat: Food 컨트롤러/서비스/리포지터리 작성 - Food 컨트롤러 코드 작성 - Food 서비스 코드 작성 - Food 리포지터리 코드 작성 - 인터셉터 등록 - FoodServiceTest 코드 문제 수정 - FakeFoodRepository 초안 작성 - 요청 dto, 응답 dto 작성 - createdAt 추가 * test: Food 테스트 작성 - Food 단위 테스트 작성 - 하위 VO 테스트 작성 * test: FoodService 음식 생성 테스트 작성 - FoodService 음식 생성 테스트 작성 - FakeFoodRepository 기능 작성 - SuperBuilder 적용 * test: FoodController 통합 테스트 추가 작성 - FoodController 음식 생성 테스트 작성 - API 문서화 반영 - 필요한 fixture 등록 * test: FoodJpaRepository 테스트 작성 - FoodJpaRepository 테스트 작성 * docs: food.sql 작성 - Food DDL 작성 * fix: url 정보 추가 - 음식 url 정보 추가 * refactor: FoodServiceTest 중복 제거 - FoodServiceTest 중복 제거 및 fixture 등록 * refactor: FoodControllerWebMvcTest 픽스처 이용 - FoodControllerWebMvcTest에 fixture 이용되도록 수정 * refactor: FoodCreateRequestFixture 중복 제거 - FoodCreateRequestFixture 중복 제거하고 다른 방식으로 작성
- Loading branch information
1 parent
d397a87
commit 24209e7
Showing
26 changed files
with
834 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 43 additions & 0 deletions
43
src/main/java/com/flab/eattofit/food/application/dto/FoodCreateRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package com.flab.eattofit.food.application.dto; | ||
|
||
import jakarta.validation.constraints.DecimalMin; | ||
import jakarta.validation.constraints.NotEmpty; | ||
import jakarta.validation.constraints.NotNull; | ||
|
||
import java.math.BigDecimal; | ||
|
||
public record FoodCreateRequest( | ||
@NotEmpty(message = "음식 이름이 있어야 합니다.") | ||
String name, | ||
|
||
@NotNull(message = "음식 사이즈가 있어야 합니다.") | ||
@DecimalMin(value = "0", inclusive = false, message = "음식 사이즈는 0보다 커야 합니다.") | ||
BigDecimal servingSize, | ||
|
||
@NotEmpty(message = "음식 사이즈 단위가 있어야 합니다.") | ||
String unit, | ||
|
||
@NotNull(message = "음식 칼로리가 있어야 합니다.") | ||
@DecimalMin(value = "0", message = "음식 칼로리는 0 이상이어야 합니다.") | ||
BigDecimal kcal, | ||
|
||
@NotNull(message = "음식 탄수화물이 있어야 합니다.") | ||
@DecimalMin(value = "0", message = "음식 탄수화물은 0 이상이어야 합니다.") | ||
BigDecimal carbohydrate, | ||
|
||
@NotNull(message = "음식 단백질이 있어야 합니다.") | ||
@DecimalMin(value = "0", message = "음식 단백질은 0 이상이어야 합니다.") | ||
BigDecimal protein, | ||
|
||
@NotNull(message = "음식 지방이 있어야 합니다.") | ||
@DecimalMin(value = "0", message = "음식 지방은 0 이상이어야 합니다.") | ||
BigDecimal fat, | ||
|
||
@NotNull(message = "음식 나트륨이 있어야 합니다.") | ||
@DecimalMin(value = "0", message = "음식 나트륨은 0 이상이어야 합니다.") | ||
BigDecimal sodium, | ||
|
||
@NotEmpty(message = "음식 이미지 주소가 있어야 합니다.") | ||
String url | ||
) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package com.flab.eattofit.food.domain; | ||
|
||
import com.flab.eattofit.food.domain.vo.FoodNutrient; | ||
import com.flab.eattofit.food.domain.vo.FoodWeight; | ||
import com.flab.eattofit.global.domain.BaseEntity; | ||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Embedded; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.GenerationType; | ||
import jakarta.persistence.Id; | ||
import lombok.AccessLevel; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import lombok.experimental.SuperBuilder; | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@SuperBuilder | ||
@Entity | ||
public class Food extends BaseEntity { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long id; | ||
|
||
@Column(nullable = false) | ||
private String name; | ||
|
||
@Embedded | ||
private FoodWeight weight; | ||
|
||
@Embedded | ||
private FoodNutrient nutrient; | ||
|
||
@Column(nullable = false) | ||
private String url; | ||
|
||
@Column(nullable = false) | ||
private Long memberId; | ||
|
||
private Food(final String name, final FoodWeight weight, final FoodNutrient nutrient, final String url, final Long memberId) { | ||
this.name = name; | ||
this.weight = weight; | ||
this.nutrient = nutrient; | ||
this.url = url; | ||
this.memberId = memberId; | ||
} | ||
|
||
public static Food createWith( | ||
final String name, | ||
final FoodWeight weight, | ||
final FoodNutrient nutrient, | ||
final String url, | ||
final Long memberId | ||
) { | ||
return new Food(name, weight, nutrient, url, memberId); | ||
} | ||
} |
6 changes: 6 additions & 0 deletions
6
src/main/java/com/flab/eattofit/food/domain/FoodRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package com.flab.eattofit.food.domain; | ||
|
||
public interface FoodRepository { | ||
|
||
Food save(Food food); | ||
} |
50 changes: 50 additions & 0 deletions
50
src/main/java/com/flab/eattofit/food/domain/vo/FoodNutrient.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
package com.flab.eattofit.food.domain.vo; | ||
|
||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Embeddable; | ||
import lombok.AccessLevel; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
import java.math.BigDecimal; | ||
|
||
@Getter | ||
@AllArgsConstructor(access = AccessLevel.PROTECTED) | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@Builder | ||
@Embeddable | ||
public class FoodNutrient { | ||
|
||
@Column(nullable = false) | ||
private BigDecimal kcal; | ||
|
||
@Column(nullable = false) | ||
private BigDecimal carbohydrate; | ||
|
||
@Column(nullable = false) | ||
private BigDecimal protein; | ||
|
||
@Column(nullable = false) | ||
private BigDecimal fat; | ||
|
||
@Column(nullable = false) | ||
private BigDecimal sodium; | ||
|
||
public static FoodNutrient createWith( | ||
final BigDecimal kcal, | ||
final BigDecimal carbohydrate, | ||
final BigDecimal protein, | ||
final BigDecimal fat, | ||
final BigDecimal sodium | ||
) { | ||
return FoodNutrient.builder() | ||
.kcal(kcal) | ||
.carbohydrate(carbohydrate) | ||
.protein(protein) | ||
.fat(fat) | ||
.sodium(sodium) | ||
.build(); | ||
} | ||
} |
29 changes: 29 additions & 0 deletions
29
src/main/java/com/flab/eattofit/food/domain/vo/FoodUnit.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package com.flab.eattofit.food.domain.vo; | ||
|
||
import com.flab.eattofit.food.exception.FoodUnitNotFoundException; | ||
import lombok.Getter; | ||
|
||
import java.util.Arrays; | ||
|
||
@Getter | ||
public enum FoodUnit { | ||
GRAM("g"), | ||
KILOGRAM("kg"); | ||
|
||
private final String name; | ||
|
||
FoodUnit(final String name) { | ||
this.name = name; | ||
} | ||
|
||
public static FoodUnit findByName(final String name) { | ||
return Arrays.stream(values()) | ||
.filter(unit -> unit.isSame(name)) | ||
.findAny() | ||
.orElseThrow(FoodUnitNotFoundException::new); | ||
} | ||
|
||
private boolean isSame(final String name) { | ||
return name.equals(this.name); | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
src/main/java/com/flab/eattofit/food/domain/vo/FoodWeight.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package com.flab.eattofit.food.domain.vo; | ||
|
||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Embeddable; | ||
import jakarta.persistence.EnumType; | ||
import jakarta.persistence.Enumerated; | ||
import lombok.AccessLevel; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
import java.math.BigDecimal; | ||
|
||
@Getter | ||
@AllArgsConstructor(access = AccessLevel.PROTECTED) | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@Embeddable | ||
public class FoodWeight { | ||
|
||
@Column(nullable = false) | ||
private BigDecimal servingSize; | ||
|
||
@Enumerated(value = EnumType.STRING) | ||
@Column(nullable = false) | ||
private FoodUnit unit; | ||
|
||
public static FoodWeight createWith(final BigDecimal servingSize, final String unit) { | ||
return new FoodWeight(servingSize, FoodUnit.findByName(unit)); | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/com/flab/eattofit/food/exception/FoodUnitNotFoundException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.flab.eattofit.food.exception; | ||
|
||
import com.flab.eattofit.global.exception.GlobalException; | ||
import org.springframework.http.HttpStatus; | ||
|
||
public class FoodUnitNotFoundException extends GlobalException { | ||
|
||
public FoodUnitNotFoundException() { | ||
super(HttpStatus.NOT_FOUND, "FOOD_UNIT_NOT_FOUND", "이용 가능한 음식 단위 타입이 아닙니다."); | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/com/flab/eattofit/food/infrastructure/FoodJpaRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package com.flab.eattofit.food.infrastructure; | ||
|
||
import com.flab.eattofit.food.domain.Food; | ||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
public interface FoodJpaRepository extends JpaRepository<Food, Long> { | ||
|
||
Food save(Food food); | ||
} |
18 changes: 18 additions & 0 deletions
18
src/main/java/com/flab/eattofit/food/infrastructure/FoodRepositoryImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package com.flab.eattofit.food.infrastructure; | ||
|
||
import com.flab.eattofit.food.domain.Food; | ||
import com.flab.eattofit.food.domain.FoodRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Repository; | ||
|
||
@RequiredArgsConstructor | ||
@Repository | ||
public class FoodRepositoryImpl implements FoodRepository { | ||
|
||
private final FoodJpaRepository foodJpaRepository; | ||
|
||
@Override | ||
public Food save(final Food food) { | ||
return foodJpaRepository.save(food); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.