feat(web): add public master profiles
PR Checks / test-and-build (pull_request) Successful in 12m32s

Add sanitized public GM profiles with publication controls, public /gm/{slug} pages, and links from public game surfaces.

Bump version -> 3.5.0
This commit is contained in:
2026-05-29 00:08:14 +03:00
parent d81564c308
commit 0c1d3abd7e
21 changed files with 980 additions and 39 deletions
@@ -828,6 +828,14 @@ public sealed class AuthorizedSessionServiceTests
public Guid? LastUpdatedPublicGroupId { get; private set; }
public string? LastUpdatedPublicSlug { get; private set; }
public bool? LastUpdatedPublicScheduleEnabled { get; private set; }
public MasterProfileSettings? MasterProfileSettings { get; set; } = new(Guid.NewGuid(), "Owner GM", null, false, null);
public bool UpdateMasterProfileCalled { get; private set; }
public string? LastMasterProfilePlatform { get; private set; }
public string? LastMasterProfileExternalUserId { get; private set; }
public string? LastMasterProfileSlug { get; private set; }
public bool? LastMasterProfileIsPublic { get; private set; }
public string? LastMasterProfileDisplayName { get; private set; }
public string? LastMasterProfileBio { get; private set; }
public Guid? LastPublicSessionId { get; private set; }
public Guid? LastPublicSessionGroupId { get; private set; }
public bool? LastSessionPublicValue { get; private set; }
@@ -1195,6 +1203,25 @@ public sealed class AuthorizedSessionServiceTests
public Task UpsertDiscordUserAsync(string discordId, string displayName, string? avatarUrl) =>
Task.CompletedTask;
public Task<MasterProfileSettings?> GetMasterProfileSettingsAsync(string platform, string externalUserId) =>
Task.FromResult(MasterProfileSettings);
public Task UpdateMasterProfileSettingsAsync(string platform, string externalUserId, string? publicSlug, bool isPublic, string displayName, string? bio)
{
UpdateMasterProfileCalled = true;
LastMasterProfilePlatform = platform;
LastMasterProfileExternalUserId = externalUserId;
LastMasterProfileSlug = publicSlug;
LastMasterProfileIsPublic = isPublic;
LastMasterProfileDisplayName = displayName;
LastMasterProfileBio = bio;
MasterProfileSettings = new(Guid.NewGuid(), displayName, publicSlug, isPublic, bio);
return Task.CompletedTask;
}
public Task<PublicMasterProfile?> GetPublicMasterProfileBySlugAsync(string slug) =>
Task.FromResult<PublicMasterProfile?>(null);
public Task<Guid?> ResolveEffectivePlayerIdAsync(string platform, string externalUserId) =>
Task.FromResult<Guid?>(Guid.NewGuid());