foodage / server

나만의 맛집 발자취, Foodage (2023.08.~)
1 stars 1 forks source link

메인 홈에서 사용하는 api 요청/응답 구조 변경 & 코드 리팩토링 #41

Closed B0X12 closed 2 weeks ago

B0X12 commented 4 weeks ago

🔖 관련 이슈

https://github.com/foodage/server/issues/40


💡 작업 사항

  • 메인 홈화면 내 api 요청/응답 구조 변경하였습니다.
  • 겸사겸사 코드 리팩토링도 진행했습니다.

최초 작업시에는 위클리 api가 메인화면 내에서만 사용할 것이라 생각되어서, 이 api들의 패키지와 클래스 도메인을 'home'으로 묶었는데 기획하다보니 메인의 위클리 api가 리뷰 조회 화면에서도 동일하게 사용될 것 같더라고요?

그래서 해당 api를 보다 범용성 있게 사용할 수 있도록 (홈 & 리뷰조회)


🧨 검토 필요

조회 결과를 날짜별로 그룹핑하기 위해 stream이 좀 복잡하게 사용되었는데요...

Map<LocalDate, PeriodReviewGroup> response = weeklyReviews.stream()
            .collect(Collectors.groupingBy(PeriodReviewResponse::getCreatedAt,
                TreeMap::new,
                Collectors.collectingAndThen(
                    Collectors.toList(),
                    list -> {
                        String dayOfWeek = list.get(0).getDayOfWeek();
                        String lastEatenFood = list.get(list.size() - 1).getLastEatenFood();
                        List<Long> reviewIds =
                            list.stream()
                                .map(PeriodReviewResponse::getId)
                                .collect(Collectors.toList());

                        return new PeriodReviewGroup(dayOfWeek, lastEatenFood, reviewIds);
                    }
                )
            ));

개선이 필요해보이죠? ㅋㅋ ㅠ 이 결과를 날짜 순서대로 정렬하기 위해 사용한 TreeMap도 HashMap에 비해 느린 시간복잡도를 가지는 자료구조라 (TreeMap : O(log n), HashMap : O(1)) 함께 개선돼야 할 것 같습니다.

일단 위 작업 내용 한 번 확인해주시고, 기능상 문제가 있는게 아니라면 일단 이 부분은 개선이 필요한 내용으로 인지만 하고 있으면 될 것 같습니다. 최초 prod 배포 전까지는 개선작업 진행하겠습니다.