mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 23:18:44 -07:00
feat: Add new API controllers for progression events, room consumables, currencies, earnings distributions, screen share reports, subscription seasons, and UGC purchasables
- Implemented ProgressionEventsController to handle progression event retrieval and active events. - Created RoomConsumablesController for listing and purchasing room consumables. - Developed RoomCurrenciesController for managing room currencies, including creation, updates, and balance retrieval. - Added RoomEarningsDistributionsController to fetch earnings distribution data for rooms. - Introduced ScreenShareReportsController for reporting screen share incidents. - Established SubscriptionSeasonsController to provide current subscription season details and rewards. - Launched UgcPurchasablesController for managing user-generated content purchasables, including bulk operations. - Added new data entities for customization and room economy, including custom avatar items, room currencies, and UGC purchasables.
This commit is contained in:
@@ -205,6 +205,7 @@ public class StorefrontsBuyController(
|
||||
/// persisted room key. The 2020.12 client sends roomKeyId and the
|
||||
/// price it displayed so we reject stale-price purchases.</summary>
|
||||
[HttpGet("api/storefronts/v1/buyRoomKey")]
|
||||
[HttpGet("api/storefronts/v1/PurchaseRoomKeyWithCurrency")]
|
||||
public async Task<IActionResult> BuyRoomKey(
|
||||
[FromQuery] long roomKeyId,
|
||||
[FromQuery] int requestedPrice)
|
||||
@@ -242,6 +243,95 @@ public class StorefrontsBuyController(
|
||||
return Ok(RoomKeyPurchaseResponse(RoomKeyStatus.Success, key, newBalance));
|
||||
}
|
||||
|
||||
[HttpPost("api/storefronts/v2/buyInvention")]
|
||||
[HttpGet("api/storefronts/v2/buyInvention")]
|
||||
public async Task<IActionResult> BuyInvention([FromQuery] long inventionId, [FromQuery] int currencyType = 2)
|
||||
{
|
||||
var pid = Me;
|
||||
var inv = await db.Inventions.FirstOrDefaultAsync(i => i.Id == inventionId && !i.IsDeleted && i.IsPublished);
|
||||
if (inv is null) return NotFound();
|
||||
var price = Math.Max(0, inv.Price);
|
||||
var balance = await level.GetBalanceAsync(pid, currencyType);
|
||||
if (balance < price) return Ok(BalanceUpdateResponse(balance, currencyType));
|
||||
var newBalance = price == 0
|
||||
? balance
|
||||
: await level.GrantCurrencyAsync(pid, currencyType, -price, $"buyInvention:{inv.Id}");
|
||||
var key = $"invention_purchase:{inv.Id}";
|
||||
if (!await db.ObjectiveProgress.AnyAsync(o => o.PlayerId == pid && o.Key == key))
|
||||
{
|
||||
db.ObjectiveProgress.Add(new ObjectiveProgressEntity
|
||||
{
|
||||
PlayerId = pid,
|
||||
Key = key,
|
||||
IsCompleted = true,
|
||||
ClearedAt = DateTime.UtcNow,
|
||||
});
|
||||
await db.SaveChangesAsync();
|
||||
}
|
||||
return Ok(BalanceUpdateResponse(newBalance, currencyType, null, null));
|
||||
}
|
||||
|
||||
[HttpPost("api/storefronts/v1/buyForFreeGiftButton")]
|
||||
[HttpGet("api/storefronts/v1/buyForFreeGiftButton")]
|
||||
public async Task<IActionResult> BuyForFreeGiftButton([FromQuery] int currencyType = 2, [FromQuery] int price = 0)
|
||||
{
|
||||
var pid = Me;
|
||||
var balance = await level.GetBalanceAsync(pid, currencyType);
|
||||
if (balance < price) return Ok(BalanceUpdateResponse(balance, currencyType));
|
||||
var newBalance = price == 0
|
||||
? balance
|
||||
: await level.GrantCurrencyAsync(pid, currencyType, -price, "freeGiftButton");
|
||||
db.GiftPackages.Add(new GiftPackageEntity
|
||||
{
|
||||
RecipientPlayerId = pid,
|
||||
CurrencyType = 2,
|
||||
Currency = 25,
|
||||
Level = 1,
|
||||
PackageVariant = "FreeGiftButton",
|
||||
PackageMaterial = string.Empty,
|
||||
IsValid = true,
|
||||
SupportsCurrentPlatform = true,
|
||||
});
|
||||
await db.SaveChangesAsync();
|
||||
return Ok(BalanceUpdateResponse(newBalance, currencyType));
|
||||
}
|
||||
|
||||
[HttpPost("api/storefronts/v1/buyProgressionEventXpBoost")]
|
||||
[HttpGet("api/storefronts/v1/buyProgressionEventXpBoost")]
|
||||
public async Task<IActionResult> BuyProgressionEventXpBoost([FromQuery] int currencyType = 2, [FromQuery] int price = 0)
|
||||
{
|
||||
var pid = Me;
|
||||
var balance = await level.GetBalanceAsync(pid, currencyType);
|
||||
if (balance < price) return Ok(BalanceUpdateResponse(balance, currencyType));
|
||||
var newBalance = price == 0
|
||||
? balance
|
||||
: await level.GrantCurrencyAsync(pid, currencyType, -price, "progressionEventXpBoost");
|
||||
db.ObjectiveProgress.Add(new ObjectiveProgressEntity
|
||||
{
|
||||
PlayerId = pid,
|
||||
Key = $"progressionEvent:xpBoost:{Guid.NewGuid():N}",
|
||||
IsCompleted = true,
|
||||
ClearedAt = DateTime.UtcNow,
|
||||
});
|
||||
await db.SaveChangesAsync();
|
||||
return Ok(BalanceUpdateResponse(newBalance, currencyType));
|
||||
}
|
||||
|
||||
[HttpPost("api/storefronts/v1/buyPurchaseReminder")]
|
||||
[HttpGet("api/storefronts/v1/buyPurchaseReminder")]
|
||||
public async Task<IActionResult> BuyPurchaseReminder()
|
||||
{
|
||||
db.ObjectiveProgress.Add(new ObjectiveProgressEntity
|
||||
{
|
||||
PlayerId = Me,
|
||||
Key = $"purchaseReminder:{Guid.NewGuid():N}",
|
||||
IsCompleted = true,
|
||||
ClearedAt = DateTime.UtcNow,
|
||||
});
|
||||
await db.SaveChangesAsync();
|
||||
return Ok(new { Success = true });
|
||||
}
|
||||
|
||||
// ── Helpers ──────────────────────────────────────────────────────────
|
||||
|
||||
private async Task GrantWardrobeAsync(long pid, string guid)
|
||||
|
||||
@@ -32,6 +32,8 @@ public class StorefrontsController(
|
||||
[HttpGet("api/storefronts/v1/all")]
|
||||
[HttpGet("api/storefronts/v2/all")]
|
||||
[HttpGet("api/storefronts/v3/all")]
|
||||
[HttpGet("api/storefronts/v1/toptoday")]
|
||||
[HttpGet("api/storefronts/v1/adcarouselitems")]
|
||||
[AllowAnonymous]
|
||||
public async Task<IActionResult> All()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user