Fix campaign owner labels to always use display names

This commit is contained in:
2026-02-26 17:42:44 +01:00
parent 0b30b04283
commit 6f94b1ba95
5 changed files with 30 additions and 5 deletions

View File

@@ -590,10 +590,18 @@ public partial class Workspace : IAsyncDisposable
if (User is not null && ownerUserId == User.Id)
return "You";
if (SelectedCampaign is not null && ownerUserId == SelectedCampaign.Gm.Id)
if (SelectedCampaign is null)
return "Unknown owner";
if (ownerUserId == SelectedCampaign.Gm.Id)
return $"{SelectedCampaign.Gm.DisplayName} (GM)";
return ownerUserId.ToString("N")[..8];
var ownerDisplayName = SelectedCampaign.Characters
.Where(character => character.OwnerUserId == ownerUserId)
.Select(character => character.OwnerDisplayName)
.FirstOrDefault(displayName => !string.IsNullOrWhiteSpace(displayName));
return string.IsNullOrWhiteSpace(ownerDisplayName) ? "Unknown owner" : ownerDisplayName;
}
private string CharacterLabel(Guid characterId)

View File

@@ -26,7 +26,7 @@ public sealed record CreateCharacterRequest(string Name, Guid CampaignId);
public sealed record UpdateCharacterRequest(string Name, Guid CampaignId, string? OwnerUsername = null);
public sealed record CharacterSummary(Guid Id, string Name, Guid OwnerUserId, Guid? CampaignId);
public sealed record CharacterSummary(Guid Id, string Name, Guid OwnerUserId, Guid? CampaignId, string OwnerDisplayName);
public sealed record CreateSkillRequest(string Name, string DiceRollDefinition, int WildDice, bool AllowFumble, Guid? SkillGroupId = null);

View File

@@ -948,9 +948,10 @@ public sealed class GameService : IGameService
}
}
private static CharacterSummary ToCharacterSummary(Character character)
private CharacterSummary ToCharacterSummary(Character character)
{
return new(character.Id, character.Name, character.OwnerUserId, character.CampaignId);
var ownerDisplayName = ResolveOwnerDisplayName(character.OwnerUserId);
return new(character.Id, character.Name, character.OwnerUserId, character.CampaignId, ownerDisplayName);
}
private static SkillGroupSummary ToSkillGroupSummary(SkillGroup skillGroup)
@@ -980,6 +981,13 @@ public sealed class GameService : IGameService
return JsonSerializer.Serialize(dice, DiceJsonOptions);
}
private string ResolveOwnerDisplayName(Guid ownerUserId)
{
return m_UsersById.TryGetValue(ownerUserId, out var owner) && !string.IsNullOrWhiteSpace(owner.DisplayName)
? owner.DisplayName
: "Unknown owner";
}
private static IReadOnlyList<RollDieResult> DeserializeDice(string serializedDice)
{
if (string.IsNullOrWhiteSpace(serializedDice))