78 lines
3.7 KiB
C#
78 lines
3.7 KiB
C#
|
|
using System;
|
||
|
|
using System.Threading;
|
||
|
|
using System.Threading.Tasks;
|
||
|
|
using RudderSdk.Core.Models.BattlePass;
|
||
|
|
|
||
|
|
namespace RudderSdk.Core;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Battle pass progress and rewards. The simple overloads target the project's
|
||
|
|
/// default battle pass; the request-based overloads carry the scenario node
|
||
|
|
/// context and are used by the scenario runtime.
|
||
|
|
/// </summary>
|
||
|
|
public sealed class BattlePassService
|
||
|
|
{
|
||
|
|
/// <summary>Free reward track, see <see cref="ClaimRewardAsync(int, string, CancellationToken)"/>.</summary>
|
||
|
|
public const string TrackFree = "free";
|
||
|
|
|
||
|
|
/// <summary>Premium reward track, see <see cref="ClaimRewardAsync(int, string, CancellationToken)"/>.</summary>
|
||
|
|
public const string TrackPremium = "premium";
|
||
|
|
|
||
|
|
private readonly RudderClient _client;
|
||
|
|
|
||
|
|
internal BattlePassService(RudderClient client) => _client = client;
|
||
|
|
|
||
|
|
/// <summary>Reads current progress: xp, level, premium ownership, claimed tiers.</summary>
|
||
|
|
public Task<GetBattlePassProgressResponse> GetProgressAsync(CancellationToken cancellationToken = default)
|
||
|
|
=> GetProgressAsync(new GetBattlePassProgressRequest(), cancellationToken);
|
||
|
|
|
||
|
|
/// <summary>Credits xp and returns the new xp/level and level-up flags.</summary>
|
||
|
|
public Task<AddBattlePassXpResponse> AddXpAsync(long amount, CancellationToken cancellationToken = default)
|
||
|
|
=> AddXpAsync(new AddBattlePassXpRequest { Amount = amount }, cancellationToken);
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Claims a tier reward at a reached level (idempotent server-side).
|
||
|
|
/// <paramref name="track"/> is <see cref="TrackFree"/> or <see cref="TrackPremium"/>.
|
||
|
|
/// </summary>
|
||
|
|
public Task<ClaimBattlePassRewardResponse> ClaimRewardAsync(int level, string track, CancellationToken cancellationToken = default)
|
||
|
|
=> ClaimRewardAsync(new ClaimBattlePassRewardRequest { Level = level, Track = track }, cancellationToken);
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Purchases the premium track (charges the wallet). When
|
||
|
|
/// <paramref name="idempotencyKey"/> is null, a random one is generated.
|
||
|
|
/// </summary>
|
||
|
|
public Task<PurchaseBattlePassPremiumResponse> PurchasePremiumAsync(string? idempotencyKey = null, CancellationToken cancellationToken = default)
|
||
|
|
=> PurchasePremiumAsync(new PurchaseBattlePassPremiumRequest
|
||
|
|
{
|
||
|
|
IdempotencyKey = idempotencyKey ?? Guid.NewGuid().ToString()
|
||
|
|
}, cancellationToken);
|
||
|
|
|
||
|
|
internal Task<GetBattlePassProgressResponse> GetProgressAsync(GetBattlePassProgressRequest request, CancellationToken cancellationToken = default)
|
||
|
|
=> _client.SendAsync<GetBattlePassProgressRequest, GetBattlePassProgressResponse>(
|
||
|
|
"POST",
|
||
|
|
"/sdk/v1/battlepass/progress",
|
||
|
|
request,
|
||
|
|
cancellationToken);
|
||
|
|
|
||
|
|
internal Task<AddBattlePassXpResponse> AddXpAsync(AddBattlePassXpRequest request, CancellationToken cancellationToken = default)
|
||
|
|
=> _client.SendAsync<AddBattlePassXpRequest, AddBattlePassXpResponse>(
|
||
|
|
"POST",
|
||
|
|
"/sdk/v1/battlepass/xp",
|
||
|
|
request,
|
||
|
|
cancellationToken);
|
||
|
|
|
||
|
|
internal Task<ClaimBattlePassRewardResponse> ClaimRewardAsync(ClaimBattlePassRewardRequest request, CancellationToken cancellationToken = default)
|
||
|
|
=> _client.SendAsync<ClaimBattlePassRewardRequest, ClaimBattlePassRewardResponse>(
|
||
|
|
"POST",
|
||
|
|
"/sdk/v1/battlepass/claim",
|
||
|
|
request,
|
||
|
|
cancellationToken);
|
||
|
|
|
||
|
|
internal Task<PurchaseBattlePassPremiumResponse> PurchasePremiumAsync(PurchaseBattlePassPremiumRequest request, CancellationToken cancellationToken = default)
|
||
|
|
=> _client.SendAsync<PurchaseBattlePassPremiumRequest, PurchaseBattlePassPremiumResponse>(
|
||
|
|
"POST",
|
||
|
|
"/sdk/v1/battlepass/premium",
|
||
|
|
request,
|
||
|
|
cancellationToken);
|
||
|
|
}
|