Consolidation
This commit is contained in:
@@ -2,6 +2,7 @@ using System.Text.Json;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using SVSim.Database;
|
||||
using SVSim.Database.Repositories.Globals;
|
||||
using SVSim.Database.Repositories.Viewer;
|
||||
@@ -26,17 +27,20 @@ public class PuzzleController : SVSimController
|
||||
private readonly IPuzzleClearRepository _clears;
|
||||
private readonly PuzzleMissionEvaluator _evaluator;
|
||||
private readonly RewardGrantService _rewards;
|
||||
private readonly ILogger<PuzzleController> _logger;
|
||||
|
||||
public PuzzleController(
|
||||
IPuzzleCatalogRepository catalog,
|
||||
IPuzzleClearRepository clears,
|
||||
PuzzleMissionEvaluator evaluator,
|
||||
RewardGrantService rewards)
|
||||
RewardGrantService rewards,
|
||||
ILogger<PuzzleController> logger)
|
||||
{
|
||||
_catalog = catalog;
|
||||
_clears = clears;
|
||||
_evaluator = evaluator;
|
||||
_rewards = rewards;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>/basic_puzzle/info — full catalog of groups + per-viewer clear flags.</summary>
|
||||
@@ -175,6 +179,7 @@ public class PuzzleController : SVSimController
|
||||
// to avoid the cartesian-explode pitfall (CLAUDE.md "EF split query").
|
||||
var ctx = HttpContext.RequestServices.GetRequiredService<SVSimDbContext>();
|
||||
var viewer = await ctx.Viewers
|
||||
.Include(v => v.Cards).ThenInclude(c => c.Card)
|
||||
.Include(v => v.Sleeves)
|
||||
.Include(v => v.Emblems)
|
||||
.Include(v => v.LeaderSkins)
|
||||
@@ -186,11 +191,22 @@ public class PuzzleController : SVSimController
|
||||
|
||||
foreach (var status in fresh)
|
||||
{
|
||||
var granted = _rewards.Apply(
|
||||
viewer,
|
||||
(SVSim.Database.Enums.UserGoodsType)status.Mission.RewardType,
|
||||
status.Mission.RewardDetailId,
|
||||
status.Mission.RewardNumber);
|
||||
IReadOnlyList<GrantedReward> granted;
|
||||
try
|
||||
{
|
||||
granted = await _rewards.ApplyAsync(
|
||||
viewer,
|
||||
(SVSim.Database.Enums.UserGoodsType)status.Mission.RewardType,
|
||||
status.Mission.RewardDetailId,
|
||||
status.Mission.RewardNumber);
|
||||
}
|
||||
catch (NotSupportedException ex)
|
||||
{
|
||||
_logger.LogWarning(ex,
|
||||
"PuzzleController: skipping unsupported reward_type={Type} detail={Detail} num={Num} for mission={MissionId}",
|
||||
status.Mission.RewardType, status.Mission.RewardDetailId, status.Mission.RewardNumber, status.Mission.Id);
|
||||
continue;
|
||||
}
|
||||
|
||||
response.AchievedInfo.AchievedMissionList.Add(new PuzzleAchievedMissionEntry
|
||||
{
|
||||
@@ -202,12 +218,15 @@ public class PuzzleController : SVSimController
|
||||
MissionRewardDetailId = status.Mission.RewardDetailId,
|
||||
MissionRewardNumber = status.Mission.RewardNumber,
|
||||
});
|
||||
response.RewardList.Add(new TreasureRewardResponse
|
||||
foreach (var g in granted)
|
||||
{
|
||||
RewardType = granted.RewardType,
|
||||
RewardId = granted.RewardId,
|
||||
RewardNum = granted.RewardNum,
|
||||
});
|
||||
response.RewardList.Add(new TreasureRewardResponse
|
||||
{
|
||||
RewardType = g.RewardType,
|
||||
RewardId = g.RewardId,
|
||||
RewardNum = g.RewardNum,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
await ctx.SaveChangesAsync();
|
||||
|
||||
Reference in New Issue
Block a user