package invite import ( "context" "errors" "strings" "gorm.io/gorm" ) // GetLanding 返回邀请落地页信息,供被邀请用户查看邀请人及奖励。 func (s *InviteService) GetLanding(ctx context.Context, inviteCode string) (*LandingResponse, error) { inviteCode = strings.TrimSpace(inviteCode) if inviteCode == "" { return nil, NewAppError(400, "invalid_invite_code", "inviteCode is required") } mapping, err := s.findInviteCodeMappingByCode(ctx, inviteCode) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, NewAppError(404, "invite_code_not_found", "invite code not found") } return nil, err } inviter, err := s.findUserBaseInfo(ctx, mapping.UserID) if err != nil { return nil, err } bundle, err := s.loadBundle(ctx, inviter.OriginSys) if err != nil { return nil, err } inviteeBindRule := firstRule(bundle.Rules, ruleTypeInviteeBind) return &LandingResponse{ CampaignEnabled: bundle.Config.Enabled, SysOrigin: inviter.OriginSys, InviterUserID: inviter.ID, InviterNickname: inviter.UserNickname, InviterAvatar: inviter.UserAvatar, InviteCode: mapping.InviteCode, DownloadURL: bundle.Config.DownloadURL, ShareTitle: defaultIfBlank(bundle.Config.ShareTitle, defaultShareTitle), ShareDesc: defaultIfBlank(bundle.Config.ShareDesc, defaultShareDesc), InviteeReward: rewardFromRule(inviteeBindRule), }, nil }