mirror of
https://github.com/JogmansonReal/Radicade.git
synced 2026-10-25 23:18:56 -07:00
126 lines
3.7 KiB
C#
126 lines
3.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|