Backend: - Add DeletedAt to AssetPreviewDto, AlbumAssetPreviewDto, AlbumPreviewDto - Remove redundant DeletedAt from AssetDto (now inherited from base) - Add viewerId parameter to ToAssetPreviewDto, ToAlbumPreviewDto, ToAlbumFullDto, ToPersonDetailedDto mappers - Conditionally send DeletedAt only when viewer is Admin or asset uploader - Pass uid/viewerId from all controller/repository call sites Frontend: - AlbumCard: show orange (not public) / red (deleted) border in select mode for admins/curators - AlbumDetail: same border logic in GetTileClass for asset tiles - Borders only appear in select mode per REDCODE's feedback
59 lines
2.8 KiB
C#
59 lines
2.8 KiB
C#
using Butter.Dtos.Album;
|
|
using Butter.Types;
|
|
using Lactose.Models;
|
|
|
|
namespace Lactose.Mapper;
|
|
|
|
/// <summary>
|
|
/// provides mapping methods for converting Album objects to DTOs.
|
|
/// </summary>
|
|
public static class AlbumMapper {
|
|
/// <summary>
|
|
/// Maps an Album object to an AlbumPreviewDto with visibility-aware fields.
|
|
/// </summary>
|
|
/// <param name="album">The album to map.</param>
|
|
/// <param name="accessLevel">The requesting user's access level.</param>
|
|
/// <param name="viewerId">The ID of the requesting user.</param>
|
|
/// <returns>An AlbumPreviewDto object.</returns>
|
|
public static AlbumPreviewDto ToAlbumPreviewDto(this Album album, EAccessLevel accessLevel, Guid? viewerId = null) => new AlbumPreviewDto {
|
|
Id = album.Id,
|
|
Name = album.Title,
|
|
Person = album.PersonOwnerId,
|
|
PersonName = album.PersonOwner?.Name,
|
|
CoverAssetId = album.CoverAssetId,
|
|
AssetCount = album.Assets?.Count(a => a.DeletedAt == null) ?? 0,
|
|
Visibility = accessLevel >= EAccessLevel.Maintainer ? album.Visibility : null,
|
|
DeletedAt = null
|
|
};
|
|
|
|
/// <summary>
|
|
/// Maps an Album object to an AlbumFullDto object.
|
|
/// </summary>
|
|
/// <param name="album">The album to map.</param>
|
|
/// <param name="accessLevel">The requesting user's access level.</param>
|
|
/// <param name="viewerId">The ID of the requesting user.</param>
|
|
/// <returns>An AlbumFullDto object.</returns>
|
|
public static AlbumFullDto ToAlbumFullDto(this Album album, EAccessLevel accessLevel, Guid? viewerId) => new AlbumFullDto {
|
|
Id = album.Id,
|
|
Name = album.Title,
|
|
Person = album.PersonOwnerId,
|
|
PersonName = album.PersonOwner?.Name,
|
|
CoverAssetId = album.CoverAssetId,
|
|
AssetCount = album.Assets?.Count(a => a.DeletedAt == null) ?? 0,
|
|
Visibility = accessLevel >= EAccessLevel.Maintainer ? album.Visibility : null,
|
|
DeletedAt = null,
|
|
Images = album.Assets?.Select(asset => asset.Id).ToList() ?? [],
|
|
AssetPreviews = album.Assets?.Select(asset => new AlbumAssetPreviewDto {
|
|
Id = asset.Id,
|
|
ResolutionWidth = asset.ResolutionWidth,
|
|
ResolutionHeight = asset.ResolutionHeight,
|
|
HasThumbnail = !string.IsNullOrEmpty(asset.ThumbnailPath),
|
|
HasPreview = !string.IsNullOrEmpty(asset.PreviewPath),
|
|
FileName = accessLevel >= EAccessLevel.Curator ? asset.OriginalFilename : null,
|
|
Visibility = accessLevel >= EAccessLevel.Maintainer ? asset.Visibility : null,
|
|
DeletedAt = accessLevel >= EAccessLevel.Admin || asset.UploadedBy == viewerId ? asset.DeletedAt : null
|
|
}).ToList() ?? []
|
|
};
|
|
|
|
}
|