feat(user-mypage): UserMyPageController + DTOs + persistence tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
51
SVSim.EmulatedEntrypoint/Controllers/UserMyPageController.cs
Normal file
51
SVSim.EmulatedEntrypoint/Controllers/UserMyPageController.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SVSim.Database;
|
||||
using SVSim.Database.Models;
|
||||
using SVSim.EmulatedEntrypoint.Models.Dtos.UserMyPage;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// /user_mypage/* — viewer-scoped MyPage configuration writes. Separate from the
|
||||
/// <c>/mypage/*</c> family because the wire URL family is distinct.
|
||||
/// </summary>
|
||||
[Route("user_mypage")]
|
||||
public sealed class UserMyPageController : SVSimController
|
||||
{
|
||||
private readonly SVSimDbContext _db;
|
||||
|
||||
public UserMyPageController(SVSimDbContext db) => _db = db;
|
||||
|
||||
[HttpPost("update")]
|
||||
public async Task<ActionResult<UserMyPageUpdateResponse>> Update(
|
||||
[FromBody] UserMyPageUpdateRequest request,
|
||||
CancellationToken ct)
|
||||
{
|
||||
if (!TryGetViewerId(out var viewerId)) return Unauthorized();
|
||||
|
||||
var viewer = await _db.Viewers
|
||||
.Include(v => v.MyPageBgRotation)
|
||||
.FirstOrDefaultAsync(v => v.Id == viewerId, ct);
|
||||
if (viewer is null) return NotFound();
|
||||
|
||||
viewer.MyPageBgSelectType = request.SelectType;
|
||||
viewer.MyPageBgId = ParseIdOrZero(request.MyPageId);
|
||||
|
||||
viewer.MyPageBgRotation.Clear();
|
||||
for (int slot = 0; slot < request.MyPageIdList.Count; slot++)
|
||||
{
|
||||
viewer.MyPageBgRotation.Add(new MyPageBgRotationEntry
|
||||
{
|
||||
Slot = slot,
|
||||
BgId = ParseIdOrZero(request.MyPageIdList[slot]),
|
||||
});
|
||||
}
|
||||
|
||||
await _db.SaveChangesAsync(ct);
|
||||
return new UserMyPageUpdateResponse();
|
||||
}
|
||||
|
||||
private static int ParseIdOrZero(string s) =>
|
||||
int.TryParse(s, out var n) ? n : 0;
|
||||
}
|
||||
Reference in New Issue
Block a user