Add owner/admin character deletion in campaign management

This commit is contained in:
2026-02-26 17:56:52 +01:00
parent ac5acd77f0
commit 51d04fcdc5
11 changed files with 174 additions and 9 deletions

View File

@@ -371,6 +371,35 @@ public partial class Workspace : IAsyncDisposable
}
}
private async Task DeleteCharacterAsync(CharacterSummary character)
{
if (IsMutating || !CanDeleteCharacter(character))
return;
var confirmed = await JS.InvokeAsync<bool>("confirm", $"Delete character '{character.Name}'?");
if (!confirmed)
return;
IsMutating = true;
try
{
_ = await ApiClient.RequestAsync<bool>("DELETE", $"/api/characters/{character.Id}");
await ReloadCampaignsAsync(SelectedCampaignId);
await ReloadCharacterCampaignOptionsAsync();
await RefreshCampaignScopeAsync();
await SyncStateEventsAsync();
SetStatus("Character deleted.", false);
}
catch (ApiRequestException ex)
{
SetStatus(ex.Message, true);
}
finally
{
IsMutating = false;
}
}
private async Task SelectCharacterAsync(Guid characterId)
{
SelectedCharacterId = characterId;
@@ -382,6 +411,11 @@ public partial class Workspace : IAsyncDisposable
return User is not null && (character.OwnerUserId == User.Id || IsCurrentUserGm || IsCurrentUserAdmin);
}
private bool CanDeleteCharacter(CharacterSummary character)
{
return User is not null && (character.OwnerUserId == User.Id || IsCurrentUserAdmin);
}
private static bool CanActivateCharacter(CharacterSummary character, UserSummary? user)
{
return user is not null && character.OwnerUserId == user.Id;