Actions
이슈 #437
진행중
JL
HP
[Go backport] FriendsService user_id 전환 — Phase 4
이슈 #437:
[Go backport] FriendsService user_id 전환 — Phase 4
시작일:
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 경로로 통합되었으므로 시그니쳐 그대로. 대신 새 helperCreditAccountByUserID(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_adjustmentsledger 에 철저히 기록 (Phase 2 경로 재사용)
관련 이슈¶
- 이전 phase: #434(Phase 1, 해결), #435(Phase 2, 해결), #436(Phase 3, 해결)
- DB 스키마 변경 — #254 refs 동반
Actions