fix(battle-pass): remove redundant SaveChanges after CommitAsync

CommitAsync's inner SaveChangesAsync already flushes the AddClaim
rows + progress.IsPremium mutation alongside the inventory grants
(same scoped DbContext). The trailing _db.SaveChangesAsync was a
no-op in BuyPremium and only meaningful in AddPoints when no level
crossed (no tx opened) — restructured to an else branch.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
gamer147
2026-05-31 18:48:26 -04:00
parent 2ee40c6df7
commit a033bf361a

View File

@@ -191,8 +191,9 @@ public sealed class BattlePassService : IBattlePassService
// op, any grants override the post-state. result.RewardList carries the final // op, any grants override the post-state. result.RewardList carries the final
// post-state including the deducted crystal balance. result.Deltas carries the raw // post-state including the deducted crystal balance. result.Deltas carries the raw
// grant amounts for achieved_info (no spend entry in Deltas, only GrantOps). // grant amounts for achieved_info (no spend entry in Deltas, only GrantOps).
// CommitAsync's SaveChangesAsync flushes the AddClaim rows + the progress.IsPremium
// mutation alongside the inventory grants — all tracked on the same scoped DbContext.
var result = await tx.CommitAsync(ct); var result = await tx.CommitAsync(ct);
await _db.SaveChangesAsync(ct); // flush claim rows added via _viewerBp.AddClaim
return new BattlePassBuyOutcome(1, result.Deltas, result.RewardList); return new BattlePassBuyOutcome(1, result.Deltas, result.RewardList);
} }
@@ -246,8 +247,12 @@ public sealed class BattlePassService : IBattlePassService
var result = await tx.CommitAsync(ct); var result = await tx.CommitAsync(ct);
newlyClaimed = result.Deltas; newlyClaimed = result.Deltas;
} }
else
await _db.SaveChangesAsync(ct); {
// No level crossed → no tx opened → still need to persist the progress mutation
// (CurrentPoint/WeeklyPoints/WeeklyPeriodStart) tracked on the scoped DbContext.
await _db.SaveChangesAsync(ct);
}
return new BattlePassPointGrant( return new BattlePassPointGrant(
BeforePoint: beforePoint, BeforePoint: beforePoint,