Skip to content

피드 관련 API 추가 필요#23

Merged
Cassiiopeia merged 2 commits intomainfrom
20260128_#19_맵시_PRD에_맞는_기능_구현_확인_점검_필요
Feb 23, 2026

Hidden character warning

The head ref may contain hidden characters: "20260128_#19_\ub9f5\uc2dc_PRD\uc5d0_\ub9de\ub294_\uae30\ub2a5_\uad6c\ud604_\ud655\uc778_\uc810\uac80_\ud544\uc694"
Merged

피드 관련 API 추가 필요#23
Cassiiopeia merged 2 commits intomainfrom
20260128_#19_맵시_PRD에_맞는_기능_구현_확인_점검_필요

Conversation

@Cassiiopeia
Copy link
Contributor

@Cassiiopeia Cassiiopeia commented Jan 28, 2026

…ee-Lab/MapSy-BE/issues/20 #21 #22

✨ 변경 사항


✅ 테스트


  • 수동 테스트 완료
  • 테스트 코드 완료

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 북마크 관리: 저장한 장소들을 조회하고 폴더, 메모, 별점, 방문 여부를 수정할 수 있습니다.
    • 피드 시스템: 최신 장소, 인기 장소, 트렌딩 키워드, 나의 상위 저장 장소를 한눈에 확인할 수 있습니다.
  • 버그 수정

    • 저장되지 않은 장소의 수정을 방지하는 검증 추가

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Jan 28, 2026

Warning

Rate limit exceeded

@Cassiiopeia has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 18 minutes and 31 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

Walkthrough

북마크 및 피드 기능을 구현하는 새로운 서비스 계층, 저장소 쿼리, DTO, 그리고 REST API 엔드포인트를 추가합니다. 최신/인기/내 상위 장소 및 트렌딩 키워드를 조회하고 북마크를 관리하는 기능이 포함됩니다.

Changes

그룹 / 파일(들) 변경 사항
에러 코드 확장
MS-Common/src/main/java/kr/suhsaechan/mapsy/common/exception/constant/ErrorCode.java
저장되지 않은 장소 수정 시도를 처리하기 위해 CANNOT_UPDATE_UNSAVED_PLACE 에러 코드 추가
데이터 전송 객체
MS-Place/src/main/java/kr/suhsaechan/mapsy/place/dto/BookmarkDto.java, KeywordDto.java, UpdateBookmarkRequest.java
북마크 조회/수정 요청(BookmarkDto, UpdateBookmarkRequest)과 트렌딩 키워드 표현(KeywordDto)을 위한 새로운 DTO 클래스 추가
저장소 확장
MS-Place/src/main/java/kr/suhsaechan/mapsy/place/repository/MemberPlaceRepository.java, PlaceRepository.java
북마크 페이지네이션, 인기 장소 조회, 상위 장소 조회를 지원하는 새로운 쿼리 메서드 추가
서비스 계층
MS-Place/src/main/java/kr/suhsaechan/mapsy/place/service/FeedService.java
최신/인기 장소, 내 상위 장소, 트렌딩 키워드 조회 기능을 제공하는 새로운 FeedService 클래스 추가
서비스 확장
MS-Place/src/main/java/kr/suhsaechan/mapsy/place/service/MemberPlaceService.java
북마크 조회/수정 및 사용자의 상위 장소 조회 메서드 추가
Web 계층 - 북마크
MS-Web/src/main/java/kr/suhsaechan/mapsy/web/controller/BookmarkController.java, BookmarkControllerDocs.java
북마크 조회 및 수정 엔드포인트(GET /api/bookmarks, PATCH /api/bookmarks/{memberPlaceId})를 구현하는 새로운 컨트롤러 및 API 명세 추가
Web 계층 - 피드
MS-Web/src/main/java/kr/suhsaechan/mapsy/web/controller/FeedController.java, FeedControllerDocs.java
최신/인기/내 상위 장소 및 트렌딩 키워드 조회 엔드포인트를 구현하는 새로운 컨트롤러 및 API 명세 추가

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant BookmarkController
    participant MemberPlaceService
    participant MemberPlaceRepository
    participant Database

    Client->>BookmarkController: GET /api/bookmarks<br/>(with Pageable)
    BookmarkController->>BookmarkController: Extract memberId from<br/>CustomUserDetails
    BookmarkController->>MemberPlaceService: getBookmarks(memberId,<br/>pageable)
    MemberPlaceService->>MemberPlaceRepository: findBookmarksByMemberIdAndSavedStatus<br/>(memberId, SAVED, pageable)
    MemberPlaceRepository->>Database: Query MemberPlace with<br/>fetch joins
    Database-->>MemberPlaceRepository: Return Page<MemberPlace>
    MemberPlaceRepository-->>MemberPlaceService: Page<MemberPlace>
    MemberPlaceService->>MemberPlaceService: Map to Page<BookmarkDto>
    MemberPlaceService-->>BookmarkController: Page<BookmarkDto>
    BookmarkController-->>Client: ResponseEntity.ok<br/>(Page<BookmarkDto>)
Loading
sequenceDiagram
    participant Client
    participant BookmarkController
    participant MemberPlaceService
    participant MemberPlaceRepository
    participant Database

    Client->>BookmarkController: PATCH /api/bookmarks/{memberPlaceId}<br/>(UpdateBookmarkRequest)
    BookmarkController->>BookmarkController: Extract memberId from<br/>CustomUserDetails
    BookmarkController->>BookmarkController: Log request
    BookmarkController->>MemberPlaceService: updateBookmark(memberId,<br/>memberPlaceId, request)
    MemberPlaceService->>MemberPlaceRepository: findByIdAndMemberIdAndDeletedAtIsNull<br/>(memberPlaceId, memberId)
    MemberPlaceRepository->>Database: Query MemberPlace
    Database-->>MemberPlaceRepository: Return Optional<MemberPlace>
    MemberPlaceRepository-->>MemberPlaceService: Optional<MemberPlace>
    MemberPlaceService->>MemberPlaceService: Validate savedStatus == SAVED<br/>or throw error
    MemberPlaceService->>MemberPlaceService: Apply non-null fields<br/>from request
    MemberPlaceService->>MemberPlaceService: Handle visited flag &<br/>visitedAt logic
    MemberPlaceService->>Database: Save updated MemberPlace
    MemberPlaceService->>MemberPlaceService: Map to BookmarkDto
    MemberPlaceService-->>BookmarkController: BookmarkDto
    BookmarkController-->>Client: ResponseEntity.ok<br/>(BookmarkDto)
Loading
sequenceDiagram
    participant Client
    participant FeedController
    participant FeedService
    participant PlaceRepository
    participant MemberPlaceService
    participant Database

    Client->>FeedController: GET /api/feed/latest<br/>(with Pageable)
    FeedController->>FeedController: Log page/size
    FeedController->>FeedService: getLatestPlaces(pageable)
    FeedService->>PlaceRepository: findAllByOrderByCreatedAtDesc<br/>(pageable)
    PlaceRepository->>Database: Query Place order by<br/>createdAt DESC
    Database-->>PlaceRepository: Return Page<Place>
    PlaceRepository-->>FeedService: Page<Place>
    FeedService->>FeedService: Map to Page<PlaceDto>
    FeedService-->>FeedController: Page<PlaceDto>
    FeedController-->>Client: ResponseEntity.ok<br/>(Page<PlaceDto>)

    Client->>FeedController: GET /api/feed/popular<br/>(with Pageable)
    FeedController->>FeedController: Log page/size
    FeedController->>FeedService: getPopularPlaces(pageable)
    FeedService->>PlaceRepository: findPopularPlaces<br/>(SAVED, pageable)
    PlaceRepository->>Database: Query Place grouped by<br/>count(MemberPlace)
    Database-->>PlaceRepository: Return Page<Place>
    PlaceRepository-->>FeedService: Page<Place>
    FeedService->>FeedService: Map to Page<PlaceDto>
    FeedService-->>FeedController: Page<PlaceDto>
    FeedController-->>Client: ResponseEntity.ok<br/>(Page<PlaceDto>)

    Client->>FeedController: GET /api/feed/my-top
    FeedController->>FeedController: Extract memberId &<br/>log memberId
    FeedController->>FeedService: getMyTopPlaces(memberId)
    FeedService->>MemberPlaceService: getMyTopPlaces(memberId)
    MemberPlaceService->>Database: Query top saved places<br/>by member
    Database-->>MemberPlaceService: Return List<Place>
    MemberPlaceService-->>FeedService: List<PlaceDto>
    FeedService-->>FeedController: List<PlaceDto>
    FeedController-->>Client: ResponseEntity.ok<br/>(List<PlaceDto>)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related issues

Possibly related PRs

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 73.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 피드 관련 API 추가라는 주요 변경 사항을 명확하게 설명하고 있으며, 실제 변경 내용(FeedController, FeedService, BookmarkController 등 피드 관련 기능)과 일치합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 20260128_#19_맵시_PRD에_맞는_기능_구현_확인_점검_필요

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant