46 lines
1.4 KiB
Go

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
}