Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#90] 전체, 연간, 월간 행복 활동 Best 3 API 구축 #94

Merged
merged 12 commits into from
May 26, 2024

Conversation

yel-m
Copy link
Member

@yel-m yel-m commented May 25, 2024

#️⃣ 연관된 이슈

Resolves #90

📝 작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요 (이미지 첨부 가능)

  • 전체 / 연간 /월간 별로 행복 활동 Best 3 API를 구축했습니다.
  • Analyzer 클래스에 행복도가 높은 상위 N개의 활동 선정하는 메서드를 생성하고 ReportRankingService에서 사용했습니다.
  • 다만 Analyzer 클래스에 있는 메서드는 모두 static 메서드이기 때문에 객체가 아니므로 의존성 주입을 통해 외부 의존성을 관리할 수 없습니다. 따라서, 따로 emoji를 관리해주는 Map을 생성했습니다. 그와 관련된 메서드가 ActivityHappinessAnalyzer의 getActivityEmojiMap 메서드입니다.
  • 활동 정렬 방법
    • 활동별로 그룹화된 레코드를 사용하여 평균 행복도와 빈도를 계산합니다.
    • 정렬된 활동 리스트에서 상위 topCount개를 선택하여 ActivityHappinessDto 객체를 생성합니다.
    • topCount보다 적은 경우 나머지 빈 항목을 추가합니다.
  • getHappiestActivitygetActivityRankings에서 똑같은 기능을 하는 부분은 공통 메서드로 추출했습니다.

테스트

/api/report/all/top-activities로 GET 요청 시 다음과 같은 응답을 받을 수 있습니다. 응답 형식은 전체 / 연간 / 월간 모두 동일하므로 전체 조회 API 예시만 첨부하겠습니다!

{
  "success": true,
  "code": 0,
  "message": "행복도가 높은 Top 3 활동(전체)을 성공적으로 조회했습니다.",
  "data": [
    {
      "ranking": 1,
      "activity": "코딩하기",
      "emoji": "🚬"
    },
    {
      "ranking": 2,
      "activity": "카페 가기",
      "emoji": "☕️"
    },
    {
      "ranking": 3,
      "activity": "데이트하기",
      "emoji": "💗"
    }
  ]
}

데이터가 없을 경우 다음과 같은 응답을 받을 수 있습니다.

{
  "success": true,
  "code": 0,
  "message": "행복도가 높은 Top 3 활동(전체)을 성공적으로 조회했습니다.",
  "data": [
    {
      "ranking": 1,
      "activity": null,
      "emoji": null
    },
    {
      "ranking": 2,
      "activity": null,
      "emoji": null
    },
    {
      "ranking": 3,
      "activity": null,
      "emoji": null
    }
  ]
}

데이터가 1개일 경우 다음과 같은 응답을 받을 수 있습니다. (2개일 경우에는 3위만 null)

{
  "success": true,
  "code": 0,
  "message": "행복도가 높은 Top 3 활동(전체)을 성공적으로 조회했습니다.",
  "data": [
    {
      "ranking": 1,
      "activity": "데이트하기",
      "emoji": "💗"
    },
    {
      "ranking": 2,
      "activity": null,
      "emoji": null
    },
    {
      "ranking": 3,
      "activity": null,
      "emoji": null
    }
  ]
}

스크린샷 (선택)

💬 리뷰 요구사항(선택)

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

✅ Check List

  • PR 제목을 커밋 규칙에 맞게 작성했는가?
  • PR에 해당되는 Issue를 연결했는가?
  • 적절한 라벨을 설정했는가?
  • 작업한 사람을 모두 Assign했는가?

@yel-m yel-m requested a review from KkomSang May 25, 2024 18:01
@yel-m yel-m self-assigned this May 25, 2024
@yel-m yel-m added the feat 새로운 기능을 추가합니다 label May 25, 2024
@yel-m yel-m changed the title [#90] 행복 활동 Best 3 API 구축 [#90] 전체, 연간, 월간 행복 활동 Best 3 API 구축 May 26, 2024
@KkomSang
Copy link
Collaborator

수고했으용👍🥸👍

@KkomSang KkomSang merged commit 86913b8 into develop May 26, 2024
1 check failed
@KkomSang KkomSang deleted the feat/#90 branch May 26, 2024 02:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat 새로운 기능을 추가합니다
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants