feat(item-acquire-history): controller + DTOs

Add ItemAcquireHistoryController (POST /item_acquire_history/info) with its
three DTOs and two integration tests (ordering + empty-viewer). The endpoint
reads ViewerAcquireHistory rows written by InventoryTransaction.CommitAsync,
ordered newest-first, capped at 300. Tests access doc.RootElement.histories
directly (no envelope wrapper in the test path — middleware skips non-UnityPlayer UA).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
gamer147
2026-06-09 14:49:43 -04:00
parent 00fbf1a185
commit f9a971a546
5 changed files with 191 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
using System.Text.Json.Serialization;
using MessagePack;
namespace SVSim.EmulatedEntrypoint.Models.Dtos.ItemAcquireHistory;
/// <summary>
/// One row in the <c>/item_acquire_history/info</c> response. All numeric fields ship as
/// decimal strings to match the prod capture.
/// </summary>
[MessagePackObject]
public sealed class ItemAcquireHistoryEntryDto
{
[JsonPropertyName("reward_type")]
[Key("reward_type")]
public string RewardType { get; set; } = "0";
[JsonPropertyName("reward_detail_id")]
[Key("reward_detail_id")]
public string RewardDetailId { get; set; } = "0";
[JsonPropertyName("reward_count")]
[Key("reward_count")]
public string RewardCount { get; set; } = "0";
[JsonPropertyName("acquire_type")]
[Key("acquire_type")]
public string AcquireType { get; set; } = "0";
[JsonPropertyName("acquire_time")]
[Key("acquire_time")]
public string AcquireTime { get; set; } = string.Empty;
[JsonPropertyName("message")]
[Key("message")]
public string Message { get; set; } = string.Empty;
}

View File

@@ -0,0 +1,12 @@
using MessagePack;
namespace SVSim.EmulatedEntrypoint.Models.Dtos.ItemAcquireHistory;
/// <summary>
/// Empty request body. The endpoint takes no parameters; this DTO exists so model binding
/// resolves the envelope correctly.
/// </summary>
[MessagePackObject(true)]
public sealed class ItemAcquireHistoryInfoRequest
{
}

View File

@@ -0,0 +1,12 @@
using System.Text.Json.Serialization;
using MessagePack;
namespace SVSim.EmulatedEntrypoint.Models.Dtos.ItemAcquireHistory;
[MessagePackObject]
public sealed class ItemAcquireHistoryInfoResponse
{
[JsonPropertyName("histories")]
[Key("histories")]
public List<ItemAcquireHistoryEntryDto> Histories { get; set; } = new();
}