feat(bp): /battle_pass/info — service + controller + 3 tests

Also fixes BattlePassRepository.GetActiveSeasonAsync to use client-side
DateTimeOffset filtering (SQLite provider cannot translate DateTimeOffset
comparisons in LINQ WHERE/ORDER BY clauses).
This commit is contained in:
gamer147
2026-05-26 23:14:26 -04:00
parent 6ed61ea9f1
commit 8a35f8c40b
5 changed files with 280 additions and 12 deletions

View File

@@ -0,0 +1,31 @@
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);
}
}