Skip to content

[Feat] 홈 목록 및 상대 프로필 조회 API 구현 #36

Description

@ruchan04

어떤 기능인가요?

프롬써치 홈 화면과 작성자 프로필 진입 흐름을 위한 조회 API를 구현합니다.

  • 홈 인기 프롬프트 목록 조회
  • 직군 태그별 프롬프트 목록 조회
  • 프롬프트 카드 작성자 클릭 시 상대 사용자 공개 프로필 조회

관련 도메인

  • prompt
  • user
  • community (좋아요/북마크 상태 조회)

API 범위

  • GET /api/v1/home/prompts/popular?page=0&size=12
  • GET /api/v1/home/prompts/jobs/{jobTagId}?page=0&size=12
  • GET /api/v1/users/{userId}/profile

요구사항

홈 프롬프트 목록

  • 비회원도 홈 목록을 조회할 수 있다.
  • 로그인 사용자는 각 카드의 liked, bookmarked 상태를 함께 받는다.
  • 인기 목록은 북마크가 아니라 좋아요 수 기준으로 정렬한다.
  • 좋아요 수가 같으면 생성 시각과 ID를 보조 정렬 기준으로 사용해 페이지네이션을 안정화한다.
  • 직군 목록은 JOB 타입 태그 ID 기준으로 필터링한다.
  • 홈에 노출되는 콘텐츠 타입은 FREE, PREMIUM으로 제한한다.
  • 삭제되었거나 활성 상태가 아닌 프롬프트는 목록에서 제외한다.
  • 비활성 사용자 작성 프롬프트는 목록에서 제외한다.
  • 응답에 카드 표시용 작성자 정보, 통계, 태그, 썸네일을 포함한다.
  • 카드 부가 정보는 배치 조회해 카드 수만큼 쿼리가 늘어나지 않도록 한다.

상대 프로필 조회

  • 비회원도 상대 사용자 공개 프로필을 조회할 수 있다.
  • 응답에는 공개 화면에 필요한 값만 포함한다.
  • 이메일, 포인트, 권한, 비밀번호 등 본인 전용/민감 정보는 응답하지 않는다.
  • 공개 목록에 노출 가능한 프롬프트 기준으로 promptCount, totalLikeCount, totalViewCount를 집계한다.
  • 존재하지 않거나 비활성 상태인 사용자는 조회할 수 없다.

문서 및 보안

  • /api/v1/home/**, /api/v1/users/*/profile 경로를 비회원 접근 가능하도록 설정한다.
  • Swagger에서도 홈 목록과 상대 프로필 조회를 인증 필수 API로 표시하지 않는다.
  • 새로 추가한 주석과 Swagger 설명은 팀원이 읽기 쉽도록 한국어로 작성한다.

TODO

  • 홈 목록 Query/Info/UseCase/Reader 정의
  • 홈 목록 Persistence Adapter 구현
  • 홈 Controller 및 Swagger Docs 작성
  • 홈 카드 Response DTO 작성
  • 상대 프로필 Query Service 및 Stats Reader 구현
  • 상대 프로필 Controller/Docs/Response DTO 작성
  • 보안 공개 경로 및 OpenAPI 보안 표시 정책 반영
  • UseCase 및 OpenAPI 테스트 추가
  • 전체 테스트 통과 확인

완료 조건

  • 홈 인기/직군 목록 조회 API가 정상 응답한다.
  • 상대 프로필 조회 API가 민감 정보를 제외한 공개 정보만 반환한다.
  • 비회원 접근 가능 API와 Swagger 보안 표시가 일치한다.
  • ./gradlew.bat clean test가 통과한다.

참고 자료

  • 5주차 회의록: 인기 정렬은 좋아요 기준
  • Figma: 홈 카드 작성자 정보 및 상대 프로필 진입 흐름
  • 기존 PR 리뷰 코멘트: 작성자 필드는 nickname, 사용자 상호작용은 liked/bookmarked로 응답
  • 통합 최적화 작업 브랜치: feat/#36-home-profile-query

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions