feat(degree): /degree/update_degree sets viewer.SelectedDegree (ownership-validated)

This commit is contained in:
gamer147
2026-06-13 08:13:49 -04:00
parent 356e58ba25
commit c5c61b6e9d
3 changed files with 89 additions and 0 deletions

View File

@@ -48,4 +48,23 @@ public class DegreeController : SVSimController
// via the shared Wizard/FavoriteTask.cs Kind enum).
return new EmptyResponse();
}
[HttpPost("update_degree")]
public async Task<ActionResult<EmptyResponse>> Update(DegreeUpdateRequest request, CancellationToken ct)
{
if (!TryGetViewerId(out long viewerId)) return Unauthorized();
var viewer = await _db.Viewers
.Include(v => v.Degrees)
.FirstOrDefaultAsync(v => v.Id == viewerId, ct);
if (viewer is null) return Unauthorized();
var owned = viewer.Degrees.FirstOrDefault(d => d.Id == request.DegreeId);
if (owned is null)
return BadRequest(new { error = "degree_not_owned" });
viewer.Info.SelectedDegree = owned;
await _db.SaveChangesAsync(ct);
return new EmptyResponse();
}
}

View File

@@ -0,0 +1,12 @@
using MessagePack;
using System.Text.Json.Serialization;
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Requests.Degree;
[MessagePackObject]
public class DegreeUpdateRequest : BaseRequest
{
[JsonPropertyName("degree_id")]
[Key("degree_id")]
public int DegreeId { get; set; }
}