Skip to content

[feat] #14 - 미션 검색 피드 API 구현 - #19

Merged
laura-jung merged 15 commits into
mainfrom
feat/#14
Aug 14, 2026
Merged

[feat] #14 - 미션 검색 피드 API 구현#19
laura-jung merged 15 commits into
mainfrom
feat/#14

Conversation

@laura-jung

@laura-jung laura-jung commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Related issue 🛠

Work Description ✏️

  • 미션 검색 피드 목록 조회 API를 구현했습니다.
    • 미션명 및 태그명 키워드 검색
    • 카테고리·난이도 다중 필터링
    • 인기순·최신순 정렬
    • 페이지네이션
  • 미션 상세 조회 API를 구현했습니다.
  • 사용자의 미션 추가 여부(isAdded)를 응답에 포함했습니다.
  • 미션을 추가한 사용자 수를 기준으로 인기도를 계산하도록 구현했습니다.
  • 미션 조회 관련 응답 DTO, 예외 및 성공 코드를 추가했습니다.
  • Swagger API 명세를 추가하고 Spring 버전과 호환되도록 의존성을 변경했습니다.
  • 사용하지 않는 미션 추천 플래그를 제거했습니다.

Trouble Shooting ⚽️

  • 인기 미션의 별도 추천 플래그 대신 UserMission 수를 기준으로 인기도를 계산하도록 변경했습니다.
  • 검색 조건에 따라 동적으로 JPQL을 구성하고, 미션 ID와 인기도를 먼저 조회한 뒤 미션·태그·사용자 추가 여부를 일괄 조회해 불필요한 반복 쿼리를 줄였습니다.
  • 잘못된 정렬값과 페이지 요청값에 대한 유효성 검증을 추가했습니다.

Related ScreenShot 📷

RESTAURANT 카테고리로 검색
스크린샷 2026-08-13 오후 6 40 36

missionId 1 상세조회
스크린샷 2026-08-13 오후 6 41 34

To Reviewers 📢

  • 인기순은 현재 미션을 추가한 사용자 수를 기준으로 정렬합니다. 다만 이전에 만든 인증 피드와 머지 후에 MissionStat을 만들어서 하나의 지표로 관리하려고 합니다.
  • 카테고리는 기존 TourApiContentType을 재사용했습니다.
  • 검색용 동적 JPQL 구성과 조회 쿼리 분리 방식이 적절한지 중점적으로 확인 부탁드립니다.

laura-jung and others added 14 commits August 11, 2026 01:56
이메일/구글 회원가입 시 이름(닉네임)을 받아 Member에 저장한다.
- Member에 nickname 컬럼 추가(기존 회원 호환 위해 nullable)
- EmailSignupRequest에 nickname 필드 추가(필수)
- 구글 가입은 구글 프로필 이름(name)을 닉네임으로 저장

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- MissionProofLike 엔티티 추가(인증글+회원 unique, 조회용 인덱스)
- MissionProofLikeRepository 추가(토글 조회, likedByMe 벌크 조회)
- MissionProof에 likeCount 증감 메서드 추가(감소 시 음수 방지)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- MissionProofFeedTab enum(LATEST/POPULAR/WEEKLY_HOT/COMPLETED)
- 피드/작성자/미션요약/좋아요토글 응답 record 추가
- 작성자 응답은 닉네임 노출, 프로필 이미지는 null(필드 미도입)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- GET /api/missions/proofs/feed: 탭별(LATEST/POPULAR/WEEKLY_HOT/COMPLETED)
  인증 피드 조회. mission/member fetch join, likedByMe/weeklyCompletedCount 벌크 계산
- WEEKLY_HOT은 요즘 핫한 미션 스냅샷(HotMission 집계) 랭킹 재사용
- POST /api/missions/proofs/{proofId}/likes/toggle: 좋아요 토글
- UserMissionRepository에 이번 주 완료수 집계 쿼리 추가
- 성공 코드/에러 코드 및 Swagger 문서 추가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@laura-jung laura-jung linked an issue Aug 13, 2026 that may be closed by this pull request
1 task
@laura-jung
laura-jung requested a review from sae2say August 13, 2026 09:42
@laura-jung laura-jung self-assigned this Aug 13, 2026

@sae2say sae2say left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

멋있다.. 저번 pr도 그렇고 dto 단위 분리와 메서드추출 깔끔하고 적절한 범위에서 하는 게 넘 부러워요
실력자 갓유나
너무 수고하셨숩니다~

import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "미션 검색 피드 카드 응답")
public record MissionCardResponse(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

앗 나는 이 미션 목록을 내가 구현하는 거라고 생각했어서 구현하고 있었어 ㅠ
그런데 나는 '미션 검색 피드'랑 '미션 추천 탭'에서 같은 api를 호출하도록 생각했어가지고.. 언니는 지금 '미션 검색 피드'에만 사용되는 걸 생각하고 해둔 것 같넹

근데 거의 구조가 비슷해서,
나중에 언니가 '검색피드 조회 api' 구현 해 둔 부분에서
response에는 설명 필드(description)랑, request에는 쿼리파라미터(missionType. 꼭 해봐야 할, 요즘핫한, 내가만든) 추가해서 두 뷰에서 모두 호출될 수 있도록 수정해놓을게! (노션 명세서, 스웨거도 같이)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 그걸 생각을 못했네..... 일단은 머지해둘께 수정부탁해!

@laura-jung
laura-jung merged commit 845190b into main Aug 14, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 미션 검색 api

2 participants