feat(mypage): /mypage/index reflects persisted bg selection

Wires MyPageController.Index to read Viewer.MyPageBgId/SelectType/BgRotation
instead of emitting an empty MyPageBgSetting placeholder; adds Include for
MyPageBgRotation in ViewerRepository.GetViewerByShortUdid; adds fresh-viewer
zero-defaults test and write→read round-trip test (9/9 controller tests pass).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
gamer147
2026-06-09 16:53:34 -04:00
parent 6123a64b37
commit 483cc1c1e0
3 changed files with 58 additions and 2 deletions

View File

@@ -66,6 +66,7 @@ public class ViewerRepository : IViewerRepository
.Include(v => v.Degrees)
.Include(v => v.LeaderSkins).ThenInclude(ls => ls.Class)
.Include(v => v.MyPageBackgrounds)
.Include(v => v.MyPageBgRotation)
.FirstOrDefaultAsync(viewer => viewer.ShortUdid == shortUdid);
}

View File

@@ -112,9 +112,17 @@ public class MyPageController : SVSimController
Quest = new Quest(), // TODO(mypage-stub): active Quest event + viewer flags
MasterPointRankingPeriod = BuildMasterPointRankingPeriod(masterPointPeriod),
PreReleaseStatus = 0, // TODO(mypage-stub): derive from PreReleaseInfo
UserMyPageInfo = new UserMyPageInfo // TODO(mypage-stub): viewer mypage BG selection
UserMyPageInfo = new UserMyPageInfo
{
UserMyPageSetting = new MyPageBgSetting(),
UserMyPageSetting = new MyPageBgSetting
{
MyPageId = viewer.MyPageBgId.ToString(),
SelectType = viewer.MyPageBgSelectType.ToString(),
MyPageIdList = viewer.MyPageBgRotation
.OrderBy(r => r.Slot)
.Select(r => r.BgId.ToString())
.ToList(),
},
},
BasicPuzzle = new Models.Dtos.Common.BadgeFlag { IsDisplayBadge = false }, // TODO(mypage-stub): viewer practice-puzzle progress
IsBattlePassPeriod = rotation.IsBattlePassPeriod,

View File

@@ -165,4 +165,51 @@ public class UserMyPageControllerTests
Assert.That(pool, Is.EqualTo(new[] { 1001, 0, 0, 1002 }),
"garbage and empty entries are stored as 0; valid entries unaffected");
}
[Test]
public async Task MyPageIndex_for_fresh_viewer_returns_zero_defaults()
{
using var factory = new SVSimTestFactory();
long viewerId = await factory.SeedViewerAsync();
using var client = factory.CreateAuthenticatedClient(viewerId);
var body = JsonBody("""{"viewer_id":"0","steam_id":0,"steam_session_ticket":""}""");
var response = await client.PostAsync("/mypage/index", body);
var raw = await response.Content.ReadAsStringAsync();
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK), raw);
using var doc = JsonDocument.Parse(raw);
var setting = doc.RootElement.GetProperty("user_mypage_info").GetProperty("user_mypage_setting");
Assert.That(setting.GetProperty("mypage_id").GetString(), Is.EqualTo("0"));
Assert.That(setting.GetProperty("select_type").GetString(), Is.EqualTo("0"));
Assert.That(setting.GetProperty("mypage_id_list").GetArrayLength(), Is.EqualTo(0));
}
[Test]
public async Task Update_then_MyPageIndex_round_trips_full_state()
{
using var factory = new SVSimTestFactory();
long viewerId = await factory.SeedViewerAsync();
using var client = factory.CreateAuthenticatedClient(viewerId);
var updateBody = JsonBody("""
{"select_type":1,"mypage_id":"1213410310","mypage_id_list":["1211410310","1212410310","1213410310","1214410310","1215410310","1216410310","1217410310","1218410310"]}
""");
var updateResp = await client.PostAsync("/user_mypage/update", updateBody);
Assert.That(updateResp.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var indexBody = JsonBody("""{"viewer_id":"0","steam_id":0,"steam_session_ticket":""}""");
var indexResp = await client.PostAsync("/mypage/index", indexBody);
var raw = await indexResp.Content.ReadAsStringAsync();
Assert.That(indexResp.StatusCode, Is.EqualTo(HttpStatusCode.OK), raw);
using var doc = JsonDocument.Parse(raw);
var setting = doc.RootElement.GetProperty("user_mypage_info").GetProperty("user_mypage_setting");
Assert.That(setting.GetProperty("mypage_id").GetString(), Is.EqualTo("1213410310"));
Assert.That(setting.GetProperty("select_type").GetString(), Is.EqualTo("1"));
var list = setting.GetProperty("mypage_id_list");
Assert.That(list.GetArrayLength(), Is.EqualTo(8));
Assert.That(list[0].GetString(), Is.EqualTo("1211410310"));
Assert.That(list[7].GetString(), Is.EqualTo("1218410310"));
}
}