Skip to content

Commit

Permalink
Merge pull request #81 from KUSITMS-30th-TEAM-A/feature/#80/modify-re…
Browse files Browse the repository at this point in the history
…commend-zone-logic

[feat] 키워드에 따른 구역 추천 결과를 3개 반환하도록 수정한다.
  • Loading branch information
juuuunny authored Nov 23, 2024
2 parents c160622 + 0d69526 commit c949bc6
Show file tree
Hide file tree
Showing 3 changed files with 148 additions and 93 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import lombok.extern.slf4j.Slf4j;

import java.util.*;
import java.util.stream.Collectors;

@Slf4j
public class RecommendTopRankedZones {
Expand Down Expand Up @@ -50,15 +51,24 @@ public static <T extends Enum<T> & StadiumStatusType> List<T> getTopRankedZones(
log.info("zone: {}, totalMatchCount: {}, page1Count: {}, page2Count: {}, page3Count: {}", result.get("zone"), result.get("totalMatchCount"), result.get("page1Count"), result.get("page2Count"), result.get("page3Count"));
return (T) result.get("zone");
})
.collect(Collectors.toCollection(ArrayList::new)); // 수정 가능한 리스트 생성

List<T> priorityDummyZones = Arrays.stream(zones)
.filter(zone -> {
int ordinal = zone.ordinal();
return ordinal == 0 || ordinal == 1 || ordinal == 2;
})
.toList();

// 필터링된 결과가 없을 경우 첫 번째 구역을 반환
if (filteredZones.isEmpty()) {
return Arrays.stream(zones)
.findFirst()
.map(List::of)
.orElse(Collections.emptyList());
for (T priorityDummyZone : priorityDummyZones) {
if (filteredZones.size() >= 3) {
break;
}
if (!filteredZones.contains(priorityDummyZone)) {
filteredZones.add(priorityDummyZone);
}
}

return filteredZones;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@ public Result(Stadium stadium, User user, String preference) {
this.user = user;
this.preference = preference;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,130 @@
@RequiredArgsConstructor
public enum KtWizStadiumStatusType implements StadiumStatusType{

//특징 확인 필요
CENTER("https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/guide/kt/center.svg",
"중앙지정석",
"#5E346E",
"특정 팀에 구애받지 않고 응원하는 구역!",
List.of(
"특정 팀에 구애받지 않고 응원하는 분위기의 구역이에요!",
"스카이존보다 훨씬 가깝게 볼 수 있어요."
),
"KT WIZ",
"상대팀",
"해당 구역은 특정 팀과 무관하게 응원할 수 있는 분위기예요.",
List.of(
new ReferencesGroup(
KtWizStadiumStatusType.DEFAULT_TITLE,
List.of(
new Reference(
"타 팀 팬들과 함께",
new String[]{
"동행자가 타 팀일 때 가기 좋아요.",
"어느 한 팀에 치우쳐져서 응원하는 분위기가 아니예요!"
}
)
)
)
),
List.of("나 혼자", "같은 팀 팬과", "다른 팀 팬과"),
List.of("열정적인 응원"),
List.of(),
List.of("삼겹살 구워먹기 가능", "큰 소리 싫어요"),
new String[]{"1루에 가까운 중앙지정석은 1루 게이트로, 3루에 가까운 중앙지정석은 3루 게이트로 가시는 것을 추천드려요!"},
new String[]{
"[1루쪽] 약 26~33cm [중앙] 약 26~33cm",
"[3루쪽] 약 26~33cm"
},
new String[]{
"[1루쪽] 약 25~30cm [중앙] 약 25~30cm",
"[3루쪽] 약 25~30cm"
},
new String[]{""}
),
SKYZONE("https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/guide/kt/skyzone.svg",
"스카이존(5층)",
"#292F46",
"높은 곳에서 경기를 한 눈에 볼 수 있는 구역!",
List.of("높은 곳에서 경기를 한 눈에 볼 수 있는 구역이에요!"),
"KT WIZ",
"상대팀",
"해당 구역은 높은 곳에 위치해있어요!",
List.of(
new ReferencesGroup(
KtWizStadiumStatusType.DEFAULT_TITLE,
List.of(
new Reference(
"높은 곳을 안 좋아하시는 분",
new String[]{
"높은 시야에서 야구를 관람할 수 있기 때문에,",
"홈과 가까운 시야에서 관람을 원하시면",
"다른 구역을 추천해요!"
}
),
new Reference(
"높은 곳까지 걸어 오르기 힘드신 분",
new String[]{
"높은 층수에 위치해 있기 때문에",
"좌석을 찾아가기까지 걸어오르는 과정이 필요해요.",
"무릎이나 체력이 안 좋으시면 비추천해요!"
}
)
)
)
),
List.of("나 혼자", "같은 팀 팬과", "다른 팀 팬과"),
List.of("경기장 한 눈에 보기"),
List.of(),
List.of("선수들 가까이", "높은 곳 싫어요", "삼겹살 구워먹기 가능"),
new String[]{
"1루에 가까운 중앙지정석은 1루 게이트로,",
"3루에 가까운 중앙지정석은 3루 게이트로 가시는 것을 추천드려요!"
},
new String[]{"약 41cm(2열), 약 54cm(이외 열)"},
new String[]{"약 28cm(2열), 약 26cm(이외 열)"},
new String[]{""}
),
CHEERING_DUMMY("https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/guide/kt/cheering.svg",
"응원지정석",
"#B23039",
"열정적인 응원뿐만 아니라, 적절히 응원하며 관람도 할 수 있는 구역이에요!",
List.of("응원 단상과 가까워, 야구를 열정적으로 응원할 수 있는 분위기의 구역이에요!"),
"KT WIZ",
"상대팀",
"해당 구역에서 적절한 응원과 관람을 원하시는 분들은 응원단상에서 먼 구역을 예매하는 것이 좋아요!",
List.of(
new ReferencesGroup(
KtWizStadiumStatusType.DEFAULT_TITLE,
List.of(
new Reference(
"앰프 소리를 좋아하지 않는 분",
new String[]{
"응원단상 근처에는 응원을 위한 앰프가 설치되어 있어요.",
"적절한 응원과 관람을 원하시면 응원단상이 있는 구역과 거리가 있는 구역을 예매하시는 것을 추천해요!"
}
),
new Reference(
"응원단상 위치 고려",
new String[]{
"1루 ‘홈팀’ KT 위즈의 응원단상은",
"109, 110 구역에 위치해요.",
"3루 ‘원정팀’ 원정 응원단상은",
"121, 122 구역에 위치해요."
}
)
)
)
),
List.of("나 혼자", "같은 팀 팬과"),
List.of("열정적인 응원"),
List.of(),
List.of("다른 팀 팬과", "큰 소리 싫어요", "음식 먹기 편한", "삼겹살 구워먹기 가능"),
new String[]{"데이터 추가 입력 예정"},
new String[]{"[1루] 약 27~32cm [3루] 약 27~32cm"},
new String[]{"[1루] 약 28cm [3루] 약 26~33cm"},
new String[]{""}
),
CHEERING("https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/guide/kt/cheering.svg",
"응원지정석",
"#B23039",
Expand All @@ -24,8 +148,13 @@ public enum KtWizStadiumStatusType implements StadiumStatusType{
KtWizStadiumStatusType.DEFAULT_TITLE,
List.of(
new Reference(
"1루 ‘홈팀’ KT 위즈의 응원단상은 109, 110 구역에 위치하고 3루 '원정팀' 원정 응원단상은 121, 122 구역에 위치해요.",
new String[]{""}
"응원단상 위치 고려",
new String[]{
"1루 ‘홈팀’ KT 위즈의 응원단상은",
"109, 110 구역에 위치해요.",
"3루 ‘원정팀’ 원정 응원단상은",
"121, 122 구역에 위치해요."
}
),
new Reference(
"시끄러운 것을 좋아하지 않는 분",
Expand Down Expand Up @@ -81,47 +210,6 @@ public enum KtWizStadiumStatusType implements StadiumStatusType{
new String[]{"약 41cm"},
new String[]{""}
),
//특징 확인 필요
CENTER("https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/guide/kt/center.svg",
"중앙지정석",
"#5E346E",
"특정 팀에 구애받지 않고 응원하는 구역!",
List.of(
"특정 팀에 구애받지 않고 응원하는 분위기의 구역이에요!",
"스카이존보다 훨씬 가깝게 볼 수 있어요."
),
"KT WIZ",
"상대팀",
"해당 구역은 특정 팀과 무관하게 응원할 수 있는 분위기예요.",
List.of(
new ReferencesGroup(
KtWizStadiumStatusType.DEFAULT_TITLE,
List.of(
new Reference(
"타 팀 팬들과 함께",
new String[]{
"동행자가 타 팀일 때 가기 좋아요.",
"어느 한 팀에 치우쳐져서 응원하는 분위기가 아니예요!"
}
)
)
)
),
List.of("나 혼자", "같은 팀 팬과", "다른 팀 팬과"),
List.of("열정적인 응원"),
List.of(),
List.of("삼겹살 구워먹기 가능", "큰 소리 싫어요"),
new String[]{"1루에 가까운 중앙지정석은 1루 게이트로, 3루에 가까운 중앙지정석은 3루 게이트로 가시는 것을 추천드려요!"},
new String[]{
"[1루쪽] 약 26~33cm [중앙] 약 26~33cm",
"[3루쪽] 약 26~33cm"
},
new String[]{
"[1루쪽] 약 25~30cm [중앙] 약 25~30cm",
"[3루쪽] 약 25~30cm"
},
new String[]{""}
),
YBOX("https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/guide/kt/ybox.svg",
"Y박스석",
"#F5A545",
Expand Down Expand Up @@ -205,49 +293,6 @@ public enum KtWizStadiumStatusType implements StadiumStatusType{
"미리 위치를 확인해보시고 참고하시는 걸 추천드려요."
}
),
SKYZONE("https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/guide/kt/skyzone.svg",
"스카이존(5층)",
"#292F46",
"높은 곳에서 경기를 한 눈에 볼 수 있는 구역!",
List.of("높은 곳에서 경기를 한 눈에 볼 수 있는 구역이에요!"),
"KT WIZ",
"상대팀",
"해당 구역은 높은 곳에 위치해있어요!",
List.of(
new ReferencesGroup(
KtWizStadiumStatusType.DEFAULT_TITLE,
List.of(
new Reference(
"높은 곳을 안 좋아하시는 분",
new String[]{
"높은 시야에서 야구를 관람할 수 있기 때문에,",
"홈과 가까운 시야에서 관람을 원하시면",
"다른 구역을 추천해요!"
}
),
new Reference(
"높은 곳까지 걸어 오르기 힘드신 분",
new String[]{
"높은 층수에 위치해 있기 때문에",
"좌석을 찾아가기까지 걸어오르는 과정이 필요해요.",
"무릎이나 체력이 안 좋으시면 비추천해요!"
}
)
)
)
),
List.of("나 혼자", "같은 팀 팬과", "다른 팀 팬과"),
List.of("경기장 한 눈에 보기"),
List.of(),
List.of("선수들 가까이", "높은 곳 싫어요", "삼겹살 구워먹기 가능"),
new String[]{
"1루에 가까운 중앙지정석은 1루 게이트로,",
"3루에 가까운 중앙지정석은 3루 게이트로 가시는 것을 추천드려요!"
},
new String[]{"약 41cm(2열), 약 54cm(이외 열)"},
new String[]{"약 28cm(2열), 약 26cm(이외 열)"},
new String[]{""}
),
EXCITING("https://kr.object.ncloudstorage.com/hitzone-bucket/hitzone/guide/kt/exciting.svg",
"하이파이브/익사이팅석",
"#3EA6A5",
Expand Down

0 comments on commit c949bc6

Please sign in to comment.