Wires IGachaPointService.TryExchangeAsync into a controller endpoint. Loads the viewer with the full cosmetic-grant graph (Cards, Sleeves, Emblems, Degrees, LeaderSkins, MyPageBackgrounds) plus the gacha-point balance + received marker, with AsSplitQuery to avoid the cartesian explosion documented in project_ef_split_query. Returns BadRequest with the outcome's error code on validation failure, or the post-state reward_list on success. Two integration tests: happy-path verifies card grant + balance debit + received-marker persistence + post-state reward_list shape; insufficient- balance path returns 400. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
11 KiB
11 KiB