mirror of
https://github.com/JogmansonReal/Radicade.git
synced 2026-10-27 07:59:03 -07:00
Radicade Public Code
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RadicadeServer.DB;
|
||||
using RadicadeServer.Extensions;
|
||||
using RadicadeServer.RecNet.Accounts.Local;
|
||||
using RadicadeServer.RecNet.Progression;
|
||||
using RadicadeServer.RecNet.Responses;
|
||||
|
||||
namespace RadicadeServer.API.Players.V1
|
||||
{
|
||||
[Route("api/players/v1")]
|
||||
public class PlayersV1(RecDBContext db) : Controller
|
||||
{
|
||||
[HttpGet("progression/{id}")]
|
||||
public ProgressionResponse? GetProgression(long id)
|
||||
{
|
||||
var data = db.Progression.FirstOrDefault((x) => x.PlayerId == id);
|
||||
data ??= new ProgressionData { PlayerId = id };
|
||||
return new ProgressionResponse(data);
|
||||
}
|
||||
|
||||
[HttpPost("progression/bulk")]
|
||||
public async Task<List<ProgressionResponse>?> GetBulkProgression([FromForm] int[] Ids)
|
||||
{
|
||||
var res = new List<ProgressionResponse>();
|
||||
foreach (int id in Ids)
|
||||
{
|
||||
var data = await db.Progression.FirstOrDefaultAsync((x) => x.PlayerId == id);
|
||||
data ??= new ProgressionData { PlayerId = id };
|
||||
res.Add(new ProgressionResponse(data));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
private const string PhotoTaggingKey = "playerPhotoTaggingSetting";
|
||||
|
||||
[HttpGet("playerPhotoTaggingSetting"), Authorize]
|
||||
public async Task<IActionResult> GetPhotoTaggingSetting()
|
||||
{
|
||||
var userId = User.GetUserId();
|
||||
if (userId == null)
|
||||
return Unauthorized();
|
||||
|
||||
var settings = await db.PlayerSettings.AsNoTracking()
|
||||
.FirstOrDefaultAsync(x => x.AccountId == userId);
|
||||
var value = settings?.DeserializeSettings()
|
||||
?.FirstOrDefault(x => string.Equals(x.Key, PhotoTaggingKey, StringComparison.OrdinalIgnoreCase))
|
||||
?.Value;
|
||||
|
||||
return Ok(int.TryParse(value, out var parsed) ? parsed : 0);
|
||||
}
|
||||
|
||||
[HttpPut("playerPhotoTaggingSetting"), Authorize]
|
||||
[HttpPost("playerPhotoTaggingSetting"), Authorize]
|
||||
public async Task<IActionResult> SetPhotoTaggingSetting()
|
||||
{
|
||||
var userId = User.GetUserId();
|
||||
if (userId == null)
|
||||
return Unauthorized();
|
||||
|
||||
int? setting = null;
|
||||
if (Request.HasFormContentType)
|
||||
{
|
||||
var form = await Request.ReadFormAsync();
|
||||
foreach (var key in new[] { "Setting", "setting" })
|
||||
{
|
||||
if (int.TryParse(form[key], out var parsed))
|
||||
{
|
||||
setting = parsed;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
using var doc = await System.Text.Json.JsonDocument.ParseAsync(Request.Body);
|
||||
var root = doc.RootElement;
|
||||
foreach (var key in new[] { "Setting", "setting" })
|
||||
{
|
||||
if (root.ValueKind == System.Text.Json.JsonValueKind.Object &&
|
||||
root.TryGetProperty(key, out var prop) &&
|
||||
prop.ValueKind == System.Text.Json.JsonValueKind.Number &&
|
||||
prop.TryGetInt32(out var parsed))
|
||||
{
|
||||
setting = parsed;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (System.Text.Json.JsonException) { }
|
||||
}
|
||||
|
||||
var settings = await db.PlayerSettings.FirstOrDefaultAsync(x => x.AccountId == userId);
|
||||
if (settings == null)
|
||||
{
|
||||
settings = new PlayerSettings { AccountId = userId.Value, Settings = "[]" };
|
||||
await db.PlayerSettings.AddAsync(settings);
|
||||
}
|
||||
|
||||
var actualSettings = settings.DeserializeSettings();
|
||||
var found = actualSettings.FirstOrDefault(x =>
|
||||
string.Equals(x.Key, PhotoTaggingKey, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (setting.HasValue)
|
||||
{
|
||||
if (found != null)
|
||||
found.Value = setting.Value.ToString();
|
||||
else
|
||||
actualSettings.Add(new Setting { Key = PhotoTaggingKey, Value = setting.Value.ToString() });
|
||||
|
||||
settings.Settings = actualSettings.ToJson();
|
||||
await db.SaveChangesAsync();
|
||||
}
|
||||
|
||||
var storedValue = actualSettings
|
||||
.FirstOrDefault(x => string.Equals(x.Key, PhotoTaggingKey, StringComparison.OrdinalIgnoreCase))
|
||||
?.Value;
|
||||
return Ok(int.TryParse(storedValue, out var stored) ? stored : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user