feat: expose cascade option on bulk update services

This commit is contained in:
2026-08-17 21:48:59 +02:00
parent 1599715d06
commit fa62e75a72
2 changed files with 8 additions and 31 deletions
+4 -28
View File
@@ -135,12 +135,13 @@ public sealed class AlbumService(
}
/// <summary>
/// Bulk updates multiple albums (e.g. visibility).
/// Bulk updates multiple albums (e.g. visibility), optionally cascading to their assets.
/// </summary>
/// <param name="ids">The album IDs to update.</param>
/// <param name="dto">The shared update values.</param>
public async Task<bool> BulkUpdateAlbumsAsync(List<Guid> ids, AlbumUpdateDto dto) {
var payload = new BulkDto<AlbumUpdateDto> { Ids = ids, Data = dto };
/// <param name="cascade">Optional cascade options (e.g. cascade a visibility change to assets).</param>
public async Task<bool> BulkUpdateAlbumsAsync(List<Guid> ids, AlbumUpdateDto dto, CascadeOptions? cascade = null) {
var payload = new BulkDto<AlbumUpdateDto> { Ids = ids, Data = dto, Cascade = cascade };
var response = await Client.PostAsJsonAsync("/api/album", payload);
return response.IsSuccessStatusCode;
}
@@ -154,29 +155,4 @@ public sealed class AlbumService(
var response = await Client.PostAsJsonAsync("/api/album/merge", dto);
response.EnsureSuccessStatusCode();
}
/// <summary>
/// For each album, collects non-deleted asset IDs and bulk-updates their visibility.
/// Skipped assets: deleted.
/// </summary>
/// <param name="albumIds">The album IDs whose assets to cascade to.</param>
/// <param name="visibility">The target visibility level.</param>
public async Task CascadeVisibilityToAssetsAsync(List<Guid> albumIds, EVisibility visibility) {
var allAssetIds = new List<Guid>();
foreach (var albumId in albumIds) {
var album = await GetAlbumAsync(albumId);
if (album?.AssetPreviews != null) {
allAssetIds.AddRange(
album.AssetPreviews
.Where(a => a.DeletedAt == null)
.Select(a => a.Id)
);
}
}
if (allAssetIds.Count > 0) {
var payload = new BulkDto<AssetUpdateDto> { Ids = allAssetIds, Data = new AssetUpdateDto { Visibility = visibility } };
var response = await Client.PostAsJsonAsync("/api/asset", payload);
response.EnsureSuccessStatusCode();
}
}
}
+4 -3
View File
@@ -111,12 +111,13 @@ public sealed class PersonService(
}
/// <summary>
/// Bulk updates multiple people (e.g. visibility, maintainers).
/// Bulk updates multiple people (e.g. visibility, maintainers), optionally cascading to their albums and assets.
/// </summary>
/// <param name="ids">The person IDs to update.</param>
/// <param name="dto">The shared update values.</param>
public async Task<bool> BulkUpdatePeopleAsync(List<Guid> ids, PersonUpdateDto dto) {
var payload = new BulkDto<PersonUpdateDto> { Ids = ids, Data = dto };
/// <param name="cascade">Optional cascade options (e.g. cascade a visibility change to albums and assets).</param>
public async Task<bool> BulkUpdatePeopleAsync(List<Guid> ids, PersonUpdateDto dto, CascadeOptions? cascade = null) {
var payload = new BulkDto<PersonUpdateDto> { Ids = ids, Data = dto, Cascade = cascade };
var response = await Client.PostAsJsonAsync("/api/person", payload);
return response.IsSuccessStatusCode;
}