Loyalty Operations

Core Data Models

Badges Model (BadgesModel)

badges.badges: [BadgeModel]?               // Available badges
badges.userBadges: [String]?               // User's earned badges

Badge Model (BadgeModel)

badge.id: String                           // Badge identifier
badge.name: String                         // Badge name
badge.description: String?                 // Badge description
badge.asset: BadgeAsset?                   // Badge visual assets
badge.requirements: [BadgeConfigRequirement]? // Badge requirements

Loyalty Configuration (LoyaltyConfig)

config.actions: [LoyaltyConfigAction]?     // Available loyalty actions
config.points: Points?                     // Points configuration
config.tiers: [Tier]?                      // Loyalty tiers

Loyalty Operations

Get Client Badges

do {
    let badges = try await sdk.loyalty().getClientBadges(disableCache: false)
    print("Available badges: \(badges.badges?.count ?? 0)")
    print("User badges: \(badges.userBadges?.count ?? 0)")
} catch {
    print("Error fetching badges: \(error)")
}

Get Loyalty Configuration

do {
    let config = try await sdk.loyalty().getConfig(disableCache: false)
    print("Loyalty config loaded with \(config.actions?.count ?? 0) actions")
} catch {
    print("Error fetching loyalty config: \(error)")
}

Get Leaderboard

do {
    let filters = LeaderboardFilters(
        limit: 50,
        page: 1
    )

    let leaderboard = try await sdk.loyalty().getLeaderboard(
        templateId: "template123",
        filters: filters,
        disableCache: false
    )

    if let leaders = leaderboard.data {
        print("Leaderboard has \(leaders.count) entries")
    }
} catch {
    print("Error fetching leaderboard: \(error)")
}

Get Leaderboard for Game

do {
    let leaderboard = try await sdk.loyalty().getLeaderboardForGame(
        gameId: "game123",
        limit: 20,
        page: 1,
        disableCache: false
    )
    print("Game leaderboard: \(leaderboard.data?.count ?? 0) entries")
} catch {
    print("Error fetching game leaderboard: \(error)")
}

Get Leaderboard for League

do {
    let filters = LeagueLeaderboardFilters(
        limit: 30,
        page: 1
    )

    let leaderboard = try await sdk.loyalty().getLeaderboardForLeague(
        leagueId: "league123",
        filters: filters
    )
    print("League leaderboard: \(leaderboard.data?.count ?? 0) entries")
} catch {
    print("Error fetching league leaderboard: \(error)")
}

Get Entities Follows

do {
    let filters = EntitiesFollowsFilters(
        competitions: ["fb:c:1", "fb:c:2"],
        teams: ["fb:t:1", "fb:t:2"],
        players: ["fb:p:123", "fb:p:456"]
    )

    let follows = try await sdk.loyalty().getEntitiesFollows(filters: filters, disableCache: false)
    print("Entities follows loaded")
} catch {
    print("Error fetching entities follows: \(error)")
}

Get Highest Success Rate

do {
    let filters = HighestSuccessRateFilters(
        fromDate: nil,
        toDate: nil,
        usersCount: 10,
        minimumPredictions: 5,
        market: nil
    )

    let successRates = try await sdk.loyalty().getHighestSuccessRate(filters: filters, disableCache: false)

    if let rates = successRates.data {
        print("Top success rates: \(rates.count) users")
    }
} catch {
    print("Error fetching highest success rate: \(error)")
}

Get Own Rankings

do {
    let filters = UserRankingFilters(
        rankType: RankType.points,
        gameType: GameType.predictor,
        typeIds: nil,
        limit: 20,
        page: 1,
        sortOrder: SortOrder.desc
    )

    let rankings = try await sdk.loyalty().getOwnRankings(filters: filters, disableCache: false)
    print("Own rankings: \(rankings.data?.count ?? 0)")
} catch {
    print("Error fetching own rankings: \(error)")
}

Get User Rankings

do {
    let filters = UserRankingFilters(
        rankType: RankType.points,
        gameType: GameType.predictor,
        typeIds: nil,
        limit: 20,
        page: 1,
        sortOrder: SortOrder.desc
    )

    let rankings = try await sdk.loyalty().getUserRankings(
        userId: "user123",
        filters: filters,
        disableCache: false
    )
    print("User rankings: \(rankings.data?.count ?? 0)")
} catch {
    print("Error fetching user rankings: \(error)")
}

Get Template by ID

do {
    let template = try await sdk.loyalty().getTemplateById(templateId: "template123", disableCache: false)

    if let templateData = template.data {
        print("Template: \(templateData.name)")
    }
} catch {
    print("Error fetching template: \(error)")
}

Get Templates

do {
    let filters = TemplateFilters(
        flags: nil,
        status: TemplateStatus.active,
        type: TemplateType.leaderboard
    )

    let templates = try await sdk.loyalty().getTemplates(filters: filters, disableCache: false)

    if let templateArray = templates.data {
        print("Templates: \(templateArray.count)")
    }
} catch {
    print("Error fetching templates: \(error)")
}

Get Template Matches

do {
    let matches = try await sdk.loyalty().getTemplateMatches(
        templateId: "template123",
        groupId: nil,
        disableCache: false
    )

    if let matchArray = matches.data {
        print("Template matches: \(matchArray.count)")
    }
} catch {
    print("Error fetching template matches: \(error)")
}

Get Template Winners

do {
    let winners = try await sdk.loyalty().getTemplateWinners(templateId: "template123", disableCache: false)

    if let winnersData = winners.data {
        print("Template winners: \(winnersData.winners?.count ?? 0)")
    }
} catch {
    print("Error fetching template winners: \(error)")
}