프로젝트

일반

사용자정보

Actions

이슈 #437

진행중
JL HP

[Go backport] FriendsService user_id 전환 — Phase 4

이슈 #437: [Go backport] FriendsService user_id 전환 — Phase 4

James Lee이(가) 약 6시간 전에 추가함.

상태:
해결
우선순위:
보통
담당자:
목표버전:
시작일:
2026/05/14
완료일:
2026/05/14 (약 6달 지연)
진척도:

0%

추정시간:

설명

배경

GoTrue 인증 전환 후속 작업(Phase 4). 현재 FriendsService 는 여전히 wallet_address + accounts.id FK 모델에 의존하고 있으며, GoTrue 사용자에게 reward wallet 이 아직 없으면 FriendsHandler.requireWallet 가 WalletFromContext 에서 빈 문자열을 받아 Unauthenticated 거부하는 문제가 있다.

작업 범위

DB 스키마 v14 (clean rewrite)

  • friends.inviter_id, invitee_id (BIGINT, accounts.id FK) → inviter_user_id, invitee_user_id (UUID). UNIQUE(inviter_user_id, invitee_user_id) + 인덱스
  • referral_claims.account_id (BIGINT) → user_id (UUID) + 인덱스
  • rewards_log.account_id (BIGINT) → user_id (UUID) + 인덱스
  • accounts.referral_code (UNIQUE) 유지 — referral code 발급 주체는 여전히 account
  • clean rewrite: 세 테이블 TRUNCATE

Store

  • store/friends.go 재작성: 모든 이름을 user_id 인자로 교체
    • GetFriendCount, GetActiveFriendCount, GetNetworkFriendsCount, GetInviterUserID, GetInvitees, GetInviterChain
    • CreateFriendship(inviterUserID, inviteeUserID)
    • CreateReferralClaim(userID, rewardType, rewardAmount)
    • GetClaimedRewards(userID), HasClaimed(userID, type, amount)
    • DeleteFriendsByInviter(inviterUserID)
  • store/accounts.go::CreditAccount 은 Phase 2 이후 이미 user_id ledger 경로로 통합되었으므로 시그니쳐 그대로. 대신 새 helper CreditAccountByUserID(userID, delta, reason, refCode) 으로 별표

Proto

  • friends.proto:
    • FriendsSummaryResponse.inviter_address (wallet) → inviter_user_id (UUID) + inviter_display_name
    • FriendInfo.wallet_address → user_id + (display_name 이다 이미 username 필드가 있으므로 별도 추가 안 함)
    • EngageResponse.inviter_address → inviter_user_id
    • GetReferralCodeResponse.wallet_address → user_id

Handler

  • handler/friends.go:
    • requireWallet(ctx) → requireUser(ctx) (user JWT 없으면 Unauthenticated)
    • 이후 db.GetAccountByUserID(userID) 로 account 조회
    • 모든 store 접근을 user_id 기반 helper 로 교체
    • db.RecordReferralEarning 은 aggregated_earnings.user_id 채워 넣으므로 user_id 을 받도록 시그니쳐 확장

제외 (추후 이슈)

  • nodes.owner_wallet_address 컬럼 제거
  • virtual_node_* 스키마 user_id 직접 키 전환

DoD

  • make build, make test 통과
  • FriendsService 7개 RPC 가 GoTrue user JWT 없으면 Unauthenticated 거부
  • 친구 관계 + 리퍼럴 리워드 + completion bonus 모두 user_id 키로 적립 / 조회
  • 각 reward claim 이 wallet_adjustments ledger 에 철저히 기록 (Phase 2 경로 재사용)

관련 이슈

  • 이전 phase: #434(Phase 1, 해결), #435(Phase 2, 해결), #436(Phase 3, 해결)
  • DB 스키마 변경 — #254 refs 동반

연결된 일감 3 (3 건 진행 중 — 모두 미완료)

다음 일감과 관련됨: 이슈 #254: 8-2. 데이터베이스 스키마 설계 (사용자. 앱. 일정)진행James Lee2026/04/282026/04/29

Actions
다음 일감을 우선 진행: 이슈 #436: [Go backport] Admin Dev Console GoTrue UI — Phase 3해결Henry Park2026/05/132026/05/13

Actions
다음에 진행할 일감: 이슈 #438: [Go backport] Legacy wallet_address 컬럼 제거 — Phase 5 (final cleanup)해결Henry Park2026/05/152026/05/15

Actions
Actions

내보내기 PDF Atom