From 0659a930f85989e0483c55ac736a84c9ca52920b Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Sat, 30 May 2026 03:27:04 -0700 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D(#128):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=AE=B6=E5=BA=AD=E6=88=90=E5=91=98=E9=82=80=E8=AF=B7=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E5=8F=AF=E8=A7=81=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: multica-agent --- .../public/user/getInviteRecordsLogic.go | 17 +++++++----- .../public/user/getInviteRecordsLogic_test.go | 27 +++++++++++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/internal/logic/public/user/getInviteRecordsLogic.go b/internal/logic/public/user/getInviteRecordsLogic.go index 4e7a40a..e0746d7 100644 --- a/internal/logic/public/user/getInviteRecordsLogic.go +++ b/internal/logic/public/user/getInviteRecordsLogic.go @@ -113,12 +113,17 @@ func (l *GetInviteRecordsLogic) GetInviteRecords(req *types.GetInviteRecordsRequ return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "query orders failed: %v", err.Error()) } + visibleUserIdSet := make(map[int64]struct{}, len(visibleUserIds)) + for _, userId := range visibleUserIds { + visibleUserIdSet[userId] = struct{}{} + } + allRecords := make([]types.InviteRecord, 0, len(parsedLogs)) for _, parsed := range parsedLogs { content := parsed.content logItem := parsed.log orderInfo, hasOrder := orders[content.OrderNo] - if !l.canViewInviteRecord(u.Id, logItem.ObjectId, hasOrder, orderInfo) { + if !l.canViewInviteRecord(u.Id, logItem.ObjectId, visibleUserIdSet, hasOrder, orderInfo) { continue } @@ -177,17 +182,17 @@ func (l *GetInviteRecordsLogic) resolveInviteRecordVisibleUserIds(currentUserId return nil, err } -func (l *GetInviteRecordsLogic) canViewInviteRecord(currentUserId, logObjectId int64, hasOrder bool, orderInfo inviteOrderUser) bool { +func (l *GetInviteRecordsLogic) canViewInviteRecord(currentUserId, logObjectId int64, visibleUserIds map[int64]struct{}, hasOrder bool, orderInfo inviteOrderUser) bool { + if _, ok := visibleUserIds[logObjectId]; !ok { + return false + } if logObjectId == currentUserId { if hasOrder { return orderInfo.UserId == currentUserId || orderInfo.RefererId == currentUserId } return true } - if !hasOrder { - return false - } - return orderInfo.UserId == currentUserId && orderInfo.SubscriptionUserId == logObjectId + return true } func normalizeInviteRecordsPagination(req *types.GetInviteRecordsRequest) { diff --git a/internal/logic/public/user/getInviteRecordsLogic_test.go b/internal/logic/public/user/getInviteRecordsLogic_test.go index 2b509e6..882afac 100644 --- a/internal/logic/public/user/getInviteRecordsLogic_test.go +++ b/internal/logic/public/user/getInviteRecordsLogic_test.go @@ -123,6 +123,33 @@ func TestGetInviteRecordsFamilyMemberSeesOwnerGiftLog(t *testing.T) { assertInviteRecordsExpectations(t, mock) } +func TestGetInviteRecordsFamilyMemberSeesAllOwnerGiftLogs(t *testing.T) { + svcCtx, mock, cleanup := newInviteRecordsTestSvc(t) + defer cleanup() + + expectInviteRecordsFamilyMember(t, mock, 51637, 510) + mock.ExpectQuery("SELECT id, object_id, content"). + WithArgs(34, int64(51637), int64(510), "邀请赠送"). + WillReturnRows(sqlmock.NewRows([]string{"id", "object_id", "content", "created_at"}). + AddRow(6, 510, `{"order_no":"owner-order","amount":7,"remark":"邀请赠送"}`, 1779934630000)) + mock.ExpectQuery("SELECT `order`.order_no, `order`.user_id, `order`.subscription_user_id, invitee.referer_id FROM `order`"). + WithArgs("owner-order"). + WillReturnRows(sqlmock.NewRows([]string{"order_no", "user_id", "subscription_user_id", "referer_id"}).AddRow("owner-order", 571, 571, 510)) + + resp, err := NewGetInviteRecordsLogic(inviteRecordsContext(51637, 0), svcCtx).GetInviteRecords(&types.GetInviteRecordsRequest{Page: 1, Size: 10}) + if err != nil { + t.Fatalf("GetInviteRecords returned error: %v", err) + } + assertInviteRecordResponse(t, resp, types.InviteRecord{ + Role: inviteRecordRoleInviter, + PeerHash: hash.InvitePeerHash(571), + GiftDays: 7, + OrderNo: "owner-order", + CreatedAt: 1779934630000, + }) + assertInviteRecordsExpectations(t, mock) +} + func TestGetInviteRecordsOwnerDoesNotSeeMemberGiftLog(t *testing.T) { svcCtx, mock, cleanup := newInviteRecordsTestSvc(t) defer cleanup()