mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 23:18:44 -07:00
4edf25b2d5
Targets Rec Room 2020.12.18 client.
Re-import after adding:
- DorkNet.ClientMod/dorknet-clientmod.json.template — config schema
the launcher's manifest-driven patcher renders into UserData/.
- tools/build-patcher-zip.ps1 — produces the dorknet-clientpatch-{key}.zip
Release asset the launcher fetches.
- .github/workflows/release.yml — auto-publishes both Release assets
on v1-december-* tag push.
Scrubbed via maintainer-side scrub-for-public.ps1: same drop rules as
the prior import, plus build-patcher-zip.ps1 added to the tools/
allow-list so it survives the scrub.
69 lines
2.5 KiB
C#
69 lines
2.5 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using DorkNet.Models.Players;
|
|
using DorkNet.Server.Auth;
|
|
using DorkNet.Server.Services;
|
|
|
|
namespace DorkNet.Server.Controllers.API.Players.V2;
|
|
|
|
[ApiController]
|
|
[Route("api/[controller]/v2")]
|
|
[Authorize]
|
|
public class PlayersController(PlayerService playerService, NotificationService notificationService) : ControllerBase
|
|
{
|
|
private long CurrentPlayerId => this.RequireCurrentPlayerId();
|
|
|
|
[HttpGet("me")]
|
|
public async Task<ActionResult<PlayerProfile>> GetSelf()
|
|
{
|
|
var player = await playerService.GetByIdAsync(CurrentPlayerId);
|
|
if (player is null) return NotFound();
|
|
return Ok(PlayerService.ToProfile(player));
|
|
}
|
|
|
|
[HttpGet("{id:long}")]
|
|
public async Task<ActionResult<PlayerProfile>> GetById(long id)
|
|
{
|
|
var player = await playerService.GetByIdAsync(id);
|
|
if (player is null) return NotFound();
|
|
return Ok(PlayerService.ToProfile(player));
|
|
}
|
|
|
|
[HttpGet("search")]
|
|
public async Task<ActionResult<List<PlayerProfile>>> Search([FromQuery] string query)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(query)) return Ok(new List<PlayerProfile>());
|
|
var results = await playerService.SearchAsync(query);
|
|
return Ok(results.Select(PlayerService.ToProfile).ToList());
|
|
}
|
|
|
|
[HttpPost("displayName")]
|
|
public async Task<ActionResult<PlayerProfile>> UpdateDisplayName([FromForm] string? DisplayName)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(DisplayName))
|
|
return BadRequest("DisplayName is required");
|
|
|
|
var updated = await playerService.UpdateDisplayNameAsync(CurrentPlayerId, DisplayName);
|
|
if (!updated) return NotFound();
|
|
|
|
var player = await playerService.GetByIdAsync(CurrentPlayerId);
|
|
await notificationService.NotifyAsync(CurrentPlayerId, Models.Notification.PushNotificationId.SubscriptionUpdateProfile, PlayerService.ToProfile(player!));
|
|
return Ok(PlayerService.ToProfile(player!));
|
|
}
|
|
|
|
[HttpPut("{id:long}")]
|
|
public async Task<ActionResult<PlayerProfile>> UpdateProfile(long id, [FromBody] UpdateProfileRequest req)
|
|
{
|
|
if (id != CurrentPlayerId) return Forbid();
|
|
|
|
if (req.DisplayName is not null)
|
|
await playerService.UpdateDisplayNameAsync(id, req.DisplayName);
|
|
|
|
if (req.Bio is not null)
|
|
await playerService.UpdateBioAsync(id, req.Bio);
|
|
|
|
var player = await playerService.GetByIdAsync(id);
|
|
return Ok(PlayerService.ToProfile(player!));
|
|
}
|
|
}
|