mirror of
https://github.com/CannedNet/CannedNet.git
synced 2026-10-26 07:28:56 -07:00
82 lines
2.6 KiB
C#
82 lines
2.6 KiB
C#
using CannedNet.Data;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace CannedNet.Services.Controllers;
|
|
|
|
[ApiController, Route("playersettings")]
|
|
public class PlayerSettingsController : ControllerBase
|
|
{
|
|
[HttpGet("playersettings")]
|
|
[Authorize]
|
|
public async Task<ActionResult> GetPlayerSettings(AppDbContext db)
|
|
{
|
|
if (!int.TryParse(User.Identity?.Name, out var id))
|
|
return Unauthorized();
|
|
|
|
var settings = await db.PlayerSettings
|
|
.Where(s => s.PlayerId == id)
|
|
.ToListAsync();
|
|
|
|
return Ok(settings);
|
|
}
|
|
|
|
[HttpPut("playersettings")]
|
|
[Authorize]
|
|
public async Task<IResult> PutPlayerSettings(AppDbContext db)
|
|
{
|
|
if (!int.TryParse(User.Identity?.Name, out var id))
|
|
return Results.Unauthorized();
|
|
|
|
var settings = new List<PlayerSetting>();
|
|
|
|
if (HttpContext.Request.ContentType?.Contains("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase) == true)
|
|
{
|
|
var form = await HttpContext.Request.ReadFormAsync();
|
|
var key = form["key"].FirstOrDefault();
|
|
var value = form["value"].FirstOrDefault();
|
|
if (!string.IsNullOrEmpty(key))
|
|
settings.Add(new PlayerSetting { Key = key, Value = value ?? "" });
|
|
}
|
|
else
|
|
{
|
|
HttpContext.Request.EnableBuffering();
|
|
HttpContext.Request.Body.Position = 0;
|
|
using var reader = new StreamReader(HttpContext.Request.Body, leaveOpen: true);
|
|
var body = await reader.ReadToEndAsync();
|
|
HttpContext.Request.Body.Position = 0;
|
|
|
|
Console.WriteLine($"Settings request body: {body}");
|
|
|
|
if (body.TrimStart().StartsWith("["))
|
|
{
|
|
settings = System.Text.Json.JsonSerializer.Deserialize<List<PlayerSetting>>(body) ?? [];
|
|
}
|
|
else
|
|
{
|
|
var single = System.Text.Json.JsonSerializer.Deserialize<PlayerSetting>(body);
|
|
if (single != null) settings.Add(single);
|
|
}
|
|
}
|
|
|
|
settings = settings.Where(s => !string.IsNullOrEmpty(s.Key)).ToList();
|
|
|
|
if (!settings.Any())
|
|
return Results.Ok();
|
|
|
|
db.PlayerSettings.RemoveRange(db.PlayerSettings.Where(s => s.PlayerId == id));
|
|
|
|
foreach (var setting in settings)
|
|
{
|
|
setting.PlayerId = id;
|
|
setting.Key = setting.Key ?? "";
|
|
setting.Value = setting.Value ?? "";
|
|
db.PlayerSettings.Add(setting);
|
|
}
|
|
|
|
await db.SaveChangesAsync();
|
|
return Results.Ok();
|
|
}
|
|
}
|