feat: rotation shops (daily/weekly) + items insurance + season pass
Build & Deploy / build (push) Successful in 10s
Build & Deploy / build (push) Successful in 10s
- RequestStoreRotationData: rotation daily (reset 00:00 UTC) + weekly (lundi) avec storeIDs rotatifs déterministes et timers d'expiration corrects. - EnterMatchmakingStation: traite purchaseInsuranceRequest au déploiement — marque les items assurés (Insurance + owner) et débite la prime (TitleData InventoryInsurance). - FYPurchaseInventoryInsuranceRequest: modèle complété (insuranceId + itemIds). - RequestClaimFortunaPassRewards: claim saison-correct (S2/S3 séparés, plus d'écrasement) + octroi des récompenses depuis catalogue TitleData optionnel (repli sûr sinon). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
31aa20abd8
commit
1e79360b6e
@@ -35,6 +35,11 @@ public class RequestStoreRotationDataFunction : ICloudScriptFunction<RequestStor
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
// Nombre de variantes de rotation (les storeId "DailyShop_N" / "WeeklyShop_N"
|
||||
// permettent au client de distinguer chaque rotation et de rafraîchir son cache).
|
||||
private const int DailyVariants = 8;
|
||||
private const int WeeklyVariants = 4;
|
||||
|
||||
public async Task<RequestStoreRotationDataResponse> ExecuteAsync(RequestStoreRotationDataRequest request)
|
||||
{
|
||||
var context = _httpContextAccessor.HttpContext;
|
||||
@@ -43,18 +48,33 @@ public class RequestStoreRotationDataFunction : ICloudScriptFunction<RequestStor
|
||||
throw new CloudScriptException("CloudScript was not called within a http request");
|
||||
}
|
||||
|
||||
// TODO: Get and save store rotation data
|
||||
var now = DateTime.UtcNow;
|
||||
|
||||
// Rotation quotidienne : expire au prochain minuit UTC ; l'index de rotation
|
||||
// est le nombre de jours écoulés depuis l'epoch (déterministe, stable).
|
||||
var todayUtc = now.Date;
|
||||
var dailyExpiration = todayUtc.AddDays(1);
|
||||
var dayIndex = (int)(todayUtc - DateTime.UnixEpoch.Date).TotalDays;
|
||||
var dailyStoreId = $"DailyShop_{dayIndex % DailyVariants}";
|
||||
|
||||
// Rotation hebdomadaire : expire au prochain lundi 00:00 UTC.
|
||||
// DayOfWeek : dimanche=0 ; on ramène lundi=0.
|
||||
var daysSinceMonday = ((int)todayUtc.DayOfWeek + 6) % 7;
|
||||
var weekStart = todayUtc.AddDays(-daysSinceMonday);
|
||||
var weeklyExpiration = weekStart.AddDays(7);
|
||||
var weekIndex = (int)Math.Floor((weekStart - DateTime.UnixEpoch.Date).TotalDays / 7);
|
||||
var weeklyStoreId = $"WeeklyShop_{weekIndex % WeeklyVariants}";
|
||||
|
||||
return new RequestStoreRotationDataResponse
|
||||
{
|
||||
Error = "",
|
||||
DailyStoreData = new StoreRotationData {
|
||||
StoreID = "DailyShop",
|
||||
ExpirationData = DateTime.UtcNow.AddDays(1)
|
||||
StoreID = dailyStoreId,
|
||||
ExpirationData = dailyExpiration
|
||||
},
|
||||
WeeklyStoreData = new StoreRotationData {
|
||||
StoreID = "WeeklyShop",
|
||||
ExpirationData = DateTime.UtcNow.AddDays(1)
|
||||
StoreID = weeklyStoreId,
|
||||
ExpirationData = weeklyExpiration
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user