-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
✨ [Feat] 당 성분이 비슷한 음료 추천 기능 구현 (#70)
- Loading branch information
1 parent
c12dbc7
commit ecc267e
Showing
10 changed files
with
222 additions
and
23 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
33 changes: 33 additions & 0 deletions
33
...weet-api/src/main/java/com/depromeet/oversweet/drink/dto/response/DrinkRecommendInfo.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,33 @@ | ||
package com.depromeet.oversweet.drink.dto.response; | ||
|
||
import com.depromeet.oversweet.drink.vo.SugarDiffState; | ||
|
||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
public class DrinkRecommendInfo { | ||
|
||
@Schema(description = "음료 id") | ||
private final Long id; | ||
|
||
@Schema(description = "음료 이름") | ||
private final String name; | ||
|
||
@Schema(description = "음료 이미지 url") | ||
private final String imageUrl; | ||
|
||
@Schema(description = "당 성분 차이") | ||
private final int sugarDifference; | ||
|
||
@Schema(description = "당 성분 차이 상태") | ||
private final SugarDiffState status; | ||
|
||
public DrinkRecommendInfo(final Long id, final String name, final String imageUrl, final int sugarDifference, final SugarDiffState status) { | ||
this.id = id; | ||
this.name = name; | ||
this.imageUrl = imageUrl; | ||
this.sugarDifference = sugarDifference; | ||
this.status = status; | ||
} | ||
} |
35 changes: 35 additions & 0 deletions
35
...-api/src/main/java/com/depromeet/oversweet/drink/dto/response/DrinkRecommendResponse.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,35 @@ | ||
package com.depromeet.oversweet.drink.dto.response; | ||
|
||
import static java.util.stream.Collectors.toList; | ||
|
||
import java.util.List; | ||
|
||
import com.depromeet.oversweet.domain.drink.entity.DrinkEntity; | ||
import com.depromeet.oversweet.drink.vo.SugarDiffState; | ||
|
||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
public class DrinkRecommendResponse { | ||
|
||
@Schema(description = "추천 음료 리스트") | ||
private final List<DrinkRecommendInfo> drinks; | ||
|
||
private DrinkRecommendResponse(final List<DrinkRecommendInfo> drinks) { | ||
this.drinks = drinks; | ||
} | ||
|
||
public static DrinkRecommendResponse from(int mainSugar, List<DrinkEntity> recommendDrinks) { | ||
List<DrinkRecommendInfo> recommendInfo = recommendDrinks.stream() | ||
.map(drink -> { | ||
int diff = Math.abs(mainSugar - drink.getSugar()); | ||
SugarDiffState state = SugarDiffState.from(mainSugar, drink.getSugar()); | ||
return new DrinkRecommendInfo(drink.getId(), drink.getName(), drink.getImageUrl(), diff, state); | ||
}) | ||
.collect(toList()); | ||
|
||
return new DrinkRecommendResponse(recommendInfo); | ||
} | ||
|
||
} |
41 changes: 41 additions & 0 deletions
41
oversweet-api/src/main/java/com/depromeet/oversweet/drink/service/DrinkRecommendService.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,41 @@ | ||
package com.depromeet.oversweet.drink.service; | ||
|
||
import java.util.List; | ||
|
||
import org.springframework.stereotype.Service; | ||
|
||
import com.depromeet.oversweet.domain.drink.entity.DrinkEntity; | ||
import com.depromeet.oversweet.domain.drink.repository.FindDrinkRepository; | ||
import com.depromeet.oversweet.drink.dto.response.DrinkRecommendResponse; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
|
||
/** | ||
* 음료 추천 Service | ||
*/ | ||
@Service | ||
@RequiredArgsConstructor | ||
public class DrinkRecommendService { | ||
|
||
private final FindDrinkRepository findDrinkRepository; | ||
|
||
/** | ||
* 당 성분이 비슷한 음료 추천 | ||
* | ||
* @param drinkId 음료 id | ||
* @return 추천 음료 리스트 | ||
*/ | ||
public DrinkRecommendResponse recommendDrink(final Long drinkId) { | ||
// 음료 조회 | ||
DrinkEntity drinkEntity = findDrinkRepository.findDrinkById(drinkId); | ||
|
||
// 음료 당 성분 기준 +-5 범위의 당 추출 | ||
int minSugar = drinkEntity.getMinSugarForRecommend(); | ||
int maxSugar = drinkEntity.getMaxSugarForRecommend(); | ||
|
||
// 조회된 음료의 프랜차이즈 and 당 추출이 +-5 범위 내의 음료 조회 | ||
List<DrinkEntity> recommendDrinks = findDrinkRepository.findDrinkBetweenSugar(minSugar, maxSugar); | ||
|
||
return DrinkRecommendResponse.from(drinkEntity.getSugar(), recommendDrinks); | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
oversweet-api/src/main/java/com/depromeet/oversweet/drink/vo/SugarDiffState.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,19 @@ | ||
package com.depromeet.oversweet.drink.vo; | ||
|
||
public enum SugarDiffState { | ||
|
||
MINUS, PLUS, SAME; | ||
|
||
|
||
public static SugarDiffState from(final int mainSugar, final int sugar) { | ||
if (mainSugar > sugar) { | ||
return MINUS; | ||
} | ||
|
||
if (mainSugar < sugar) { | ||
return PLUS; | ||
} | ||
|
||
return SAME; | ||
} | ||
} |
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
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
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