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.
64 lines
2.4 KiB
C#
64 lines
2.4 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.PlayerWarnings;
|
|
|
|
[ApiController]
|
|
[Authorize]
|
|
public class PlayerWarningsController(DorkNetDbContext db) : ControllerBase
|
|
{
|
|
[HttpGet("api/playerwarnings")]
|
|
public async Task<IActionResult> Warnings()
|
|
{
|
|
var me = this.RequireCurrentPlayerId();
|
|
var rows = await db.PlayerSettings
|
|
.Where(s => s.PlayerId == me && s.Key.StartsWith("warning:"))
|
|
.OrderByDescending(s => s.Id)
|
|
.ToListAsync();
|
|
return Ok(rows
|
|
.Select(ToWarningWire)
|
|
.Where(w => !w.Acknowledged)
|
|
.ToList());
|
|
}
|
|
|
|
[HttpPost("api/playerwarnings/acknowledge")]
|
|
public async Task<IActionResult> Acknowledge([FromForm] string? warningId)
|
|
{
|
|
var me = this.RequireCurrentPlayerId();
|
|
var id = warningId ?? Request.Query["warningId"].FirstOrDefault() ?? Request.Query["id"].FirstOrDefault();
|
|
if (string.IsNullOrWhiteSpace(id)) return BadRequest("missing_warning");
|
|
var row = await db.PlayerSettings
|
|
.FirstOrDefaultAsync(s => s.PlayerId == me && s.Key == $"warning:{id}");
|
|
if (row is null) return NotFound();
|
|
var parts = row.Value.Split('|');
|
|
row.Value = string.Join('|', parts.Take(3).Append("true"));
|
|
await db.SaveChangesAsync();
|
|
return Ok(new { Success = true, WarningId = id });
|
|
}
|
|
|
|
private static WarningWire ToWarningWire(DorkNet.Server.Data.Entities.PlayerSettingEntity row)
|
|
{
|
|
var parts = row.Value.Split('|');
|
|
return new WarningWire
|
|
{
|
|
WarningId = row.Key["warning:".Length..],
|
|
Message = parts.ElementAtOrDefault(0) ?? string.Empty,
|
|
Category = int.TryParse(parts.ElementAtOrDefault(1), out var category) ? category : 0,
|
|
CreatedAt = parts.ElementAtOrDefault(2) ?? string.Empty,
|
|
Acknowledged = bool.TryParse(parts.ElementAtOrDefault(3), out var acknowledged) && acknowledged,
|
|
};
|
|
}
|
|
|
|
private sealed class WarningWire
|
|
{
|
|
public string WarningId { get; set; } = string.Empty;
|
|
public string Message { get; set; } = string.Empty;
|
|
public int Category { get; set; }
|
|
public string CreatedAt { get; set; } = string.Empty;
|
|
public bool Acknowledged { get; set; }
|
|
}
|
|
}
|