Skip to content

feat(community): 팔로우 API·프로필 실데이터·타인 프로필 /profile/[userId] #27

@cocoyoon

Description

@cocoyoon

목표

팔로우 관계를 DB·API로 추가하고, 프로필 UI의 팔로워/팔로잉 수를 실데이터로 바꾸며, 타인 공개 프로필 /profile/[userId]를 제공한다. (스펙 specs/screens/user/SCR-USER-02-profile.md와 현재 구현 차이를 줄인다.)

현재 코드 요약 (2026-03 기준)

영역 파일 상태
팔로우 수 UI packages/web/lib/components/profile/FollowStats.tsx followers=1234, following=567 하드코딩 기본값
내 프로필 packages/web/app/profile/ProfileClient.tsx useMe, useUserStats, useMyBadges, useMyRanking, useUserActivitiesAPI 연동됨
활동 탭 GET /api/v1/users/me/activities 이미 사용 중 — 타인용 공개 엔드포인트 필요 여부 검토
Try 탭 packages/web/lib/components/profile/TriesGrid.tsx fetchMyTries항상 []GET /api/v1/users/me/tries TODO 주석
Saved 탭 packages/web/lib/components/profile/SavedGrid.tsx 컬렉션 스토어 기반(로컬/별도 API) — “저장 포스트”와 제품 정의 정렬 필요
타인 프로필 /profile/[userId] 라우트 없음

DB 설계 (제안 — PR에서 확정)

  • user_follows (또는 동일 의미): follower_id, following_id, created_at, UNIQUE(follower_id, following_id), 자기 자신 팔로우 방지 CHECK
  • 인덱스: following_id로 팔로워 수, follower_id로 팔로잉 수 집계

API (Rust api-server)

  • POST /api/v1/users/{user_id}/follow / DELETE .../follow (또는 토글 하나) — 인증 필수
  • GET /api/v1/users/{user_id}/followers, .../following (페이지네이션) 또는 카운트만 GET /api/v1/users/{user_id} 확장 필드
  • (선택) 차단·비공개 프로필은 후속; 1차는 전체 공개 가정 시 RLS/핸들러에서 본인만 쓰기

  • FollowStats: props로 실제 숫자 전달; ProfileClient에서 위 API 또는 useMe 확장으로 주입
  • 타인 프로필: packages/web/app/profile/[userId]/page.tsx + Client — GET /api/v1/users/{userId}(이미 존재할 수 있음)로 공개 필드 표시
  • 타인 프로필에서 Follow 버튼 — 로그인 시 위 follow API 호출
  • TriesGrid: feat(community): Try 포스트 백엔드 — parent_post_id, tries API, OpenAPI/Orval #24 Try 스키마와 맞춰 내 Try 목록 API 설계 (post_type=try AND user_id=me 등) 후 연동
  • Saved 탭: “저장한 포스트”를 서버 saved_posts와 맞출지, 현재 컬렉션 UX를 유지할지 제품 결정 후 이슈 범위에 명시

수용 기준

  1. 내 프로필에서 팔로워/팔로잉 숫자가 DB와 일치한다(하드코딩 제거).
  2. 다른 유저의 /profile/{uuid}에서 공개 정보 + Follow 동작(본인 제외).
  3. OpenAPI·docs/agent/api-v1-routes.md에 신규 엔드포인트 반영.

관련 이슈

참고

  • packages/api-server/src/domains/users/handlers.rs (/me, /me/activities 패턴)
  • specs/screens/user/SCR-USER-02-profile.md (스펙과 불일치 시 스펙 갱신 PR 함께 권장)

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type
No fields configured for issues without a type.

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions