46 lines
1.4 KiB
Go
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
|
|
}
|