mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 15:08:47 -07:00
70980bf3b6
- 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.
56 lines
1.9 KiB
C#
56 lines
1.9 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using DorkNet.Server.Auth;
|
|
using DorkNet.Server.Data;
|
|
|
|
namespace DorkNet.Server.Controllers.API.RoomEarningsDistributions;
|
|
|
|
[ApiController]
|
|
[Authorize]
|
|
public class RoomEarningsDistributionsController(DorkNetDbContext db) : ControllerBase
|
|
{
|
|
[HttpGet("api/roomEarningsDistributions")]
|
|
[HttpGet("api/roomEarningsDistributions/v1/earningsDistribution")]
|
|
public async Task<IActionResult> EarningsDistribution([FromQuery] long? roomId = null)
|
|
{
|
|
var me = this.RequireCurrentPlayerId();
|
|
var rooms = db.Rooms.Where(r => r.CreatorPlayerId == me);
|
|
if (roomId is long rid && rid > 0)
|
|
rooms = rooms.Where(r => r.Id == rid);
|
|
|
|
var roomRows = await rooms
|
|
.Select(r => new { r.Id, r.Name })
|
|
.ToListAsync();
|
|
var roomIds = roomRows.Select(r => r.Id).ToList();
|
|
var earnings = await db.RoomKeyPurchases
|
|
.Join(db.RoomKeys, p => p.RoomKeyId, k => k.Id, (p, k) => new { p, k })
|
|
.Where(x => roomIds.Contains(x.k.RoomId))
|
|
.GroupBy(x => x.k.RoomId)
|
|
.Select(g => new
|
|
{
|
|
RoomId = g.Key,
|
|
Gross = g.Sum(x => x.p.PaidPrice),
|
|
PurchaseCount = g.Count(),
|
|
})
|
|
.ToListAsync();
|
|
|
|
var byRoom = earnings.ToDictionary(e => e.RoomId);
|
|
return Ok(roomRows.Select(room =>
|
|
{
|
|
byRoom.TryGetValue(room.Id, out var value);
|
|
var gross = value?.Gross ?? 0;
|
|
return new
|
|
{
|
|
RoomId = room.Id,
|
|
room.Name,
|
|
GrossEarnings = gross,
|
|
NetEarnings = gross,
|
|
PurchaseCount = value?.PurchaseCount ?? 0,
|
|
CurrencyType = 2,
|
|
UpdatedAt = DateTime.UtcNow,
|
|
};
|
|
}).ToList());
|
|
}
|
|
}
|