Files
SVSimServer/SVSim.EmulatedEntrypoint/Controllers/BattlePassController.cs
gamer147 0ceab721e9 feat(bp): /battle_pass/item_list — derives product per active season
Adds BattlePassSalesPeriodInfoDto, BattlePassProductDto, BattlePassItemListResponse DTOs,
GetItemListAsync on BattlePassService (one product if not premium + CanPurchase, empty if
already premium or off-season), and the /battle_pass/item_list controller action.
2 new integration tests; all 408 pass.
2026-05-26 23:26:46 -04:00

42 lines
1.3 KiB
C#

using Microsoft.AspNetCore.Mvc;
using SVSim.EmulatedEntrypoint.Models.Dtos.BattlePass;
using SVSim.EmulatedEntrypoint.Models.Dtos.Requests;
using SVSim.EmulatedEntrypoint.Services;
namespace SVSim.EmulatedEntrypoint.Controllers;
/// <summary>
/// /battle_pass/* — season metadata, premium-pass purchase. Wire shapes mirror
/// Wizard/BattlePass{Info,PurchaseInfo,Buy}Task.cs.
/// </summary>
[Route("battle_pass")]
public class BattlePassController : SVSimController
{
private readonly IBattlePassService _battlePass;
public BattlePassController(IBattlePassService battlePass)
{
_battlePass = battlePass;
}
[HttpPost("info")]
public async Task<IActionResult> Info(BaseRequest request, CancellationToken ct)
{
if (!TryGetViewerId(out long viewerId)) return Unauthorized();
var info = await _battlePass.GetInfoAsync(viewerId, ct);
if (info is null) return Ok(new { }); // off-season: empty payload
return Ok(info);
}
[HttpPost("item_list")]
public async Task<IActionResult> ItemList(BaseRequest request, CancellationToken ct)
{
if (!TryGetViewerId(out long viewerId)) return Unauthorized();
var list = await _battlePass.GetItemListAsync(viewerId, ct);
if (list is null) return Ok(new { });
return Ok(list);
}
}