diff --git a/Lactose/Mapper/AlbumMapper.cs b/Lactose/Mapper/AlbumMapper.cs
index d1f4b61..91639c6 100644
--- a/Lactose/Mapper/AlbumMapper.cs
+++ b/Lactose/Mapper/AlbumMapper.cs
@@ -1,53 +1 @@
-using Butter.Dtos.Album;
-using Butter.Types;
-using Lactose.Models;
-
-namespace Lactose.Mapper;
-
-///
-/// provides mapping methods for converting Album objects to DTOs.
-///
-public static class AlbumMapper {
- ///
- /// Maps an Album object to an AlbumPreviewDto with visibility-aware fields.
- ///
- /// The album to map.
- /// The requesting user's access level.
- /// An AlbumPreviewDto object.
- public static AlbumPreviewDto ToAlbumPreviewDto(this Album album, EAccessLevel accessLevel) => 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
- };
-
- ///
- /// Maps an Album object to an AlbumFullDto object.
- ///
- /// The album to map.
- /// The requesting user's access level.
- /// An AlbumFullDto object.
- public static AlbumFullDto ToAlbumFullDto(this Album album, EAccessLevel accessLevel) => 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,
- 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
- }).ToList() ?? []
- };
-
-}
+dXNpbmcgQnV0dGVyLkR0b3MuQWxidW07CnVzaW5nIEJ1dHRlci5UeXBlczsKdXNpbmcgTGFjdG9zZS5Nb2RlbHM7CgpuYW1lc3BhY2UgTGFjdG9zZS5NYXBwZXI7CgovLy8gPHN1bW1hcnk+Ci8vLyBwcm92aWRlcyBtYXBwaW5nIG1ldGhvZHMgZm9yIGNvbnZlcnRpbmcgQWxidW0gb2JqZWN0cyB0byBEVE9zLiAKLy8vIDwvc3VtbWFyeT4KcHVibGljIHN0YXRpYyBjbGFzcyBBbGJ1bU1hcHBlciB7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gTWFwcyBhbiBBbGJ1bSBvYmplY3QgdG8gYW4gQWxidW1QcmV2aWV3RHRvIHdpdGggdmlzaWJpbGl0eS1hd2FyZSBmaWVsZHMuCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJhbGJ1bSI+VGhlIGFsYnVtIHRvIG1hcC48L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJhY2Nlc3NMZXZlbCI+VGhlIHJlcXVlc3RpbmcgdXNlcidzIGFjY2VzcyBsZXZlbC48L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJ2aWV3ZXJJZCI+VGhlIElEIG9mIHRoZSByZXF1ZXN0aW5nIHVzZXIuPC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5BbiBBbGJ1bVByZXZpZXdEdG8gb2JqZWN0LjwvcmV0dXJucz4KICAgIHB1YmxpYyBzdGF0aWMgQWxidW1QcmV2aWV3RHRvIFRvQWxidW1QcmV2aWV3RHRvKHRoaXMgQWxidW0gYWxidW0sIEVBY2Nlc3NMZXZlbCBhY2Nlc3NMZXZlbCwgR3VpZD8gdmlld2VySWQgPSBudWxsKSA9PiBuZXcgQWxidW1QcmV2aWV3RHRvIHsKICAgICAgICBJZCAgICAgICAgICAgPSBhbGJ1bS5JZCwKICAgICAgICBOYW1lICAgICAgICAgPSBhbGJ1bS5UaXRsZSwKICAgICAgICBQZXJzb24gICAgICAgPSBhbGJ1bS5QZXJzb25Pd25lcklkLAogICAgICAgIFBlcnNvbk5hbWUgICA9IGFsYnVtLlBlcnNvbk93bmVyPy5OYW1lLAogICAgICAgIENvdmVyQXNzZXRJZCA9IGFsYnVtLkNvdmVyQXNzZXRJZCwKICAgICAgICBBc3NldENvdW50ICAgPSBhbGJ1bS5Bc3NldHM/LkNvdW50KGEgPT4gYS5EZWxldGVkQXQgPT0gbnVsbCkgPz8gMCwKICAgICAgICBWaXNpYmlsaXR5ICAgPSBhY2Nlc3NMZXZlbCA+PSBFQWNjZXNzTGV2ZWwuTWFpbnRhaW5lciA/IGFsYnVtLlZpc2liaWxpdHkgOiBudWxsLAogICAgICAgIERlbGV0ZWRBdCAgICA9IG51bGwKICAgIH07CgogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIE1hcHMgYW4gQWxidW0gb2JqZWN0IHRvIGFuIEFsYnVtRnVsbER0byBvYmplY3QuCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJhbGJ1bSI+VGhlIGFsYnVtIHRvIG1hcC48L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJhY2Nlc3NMZXZlbCI+VGhlIHJlcXVlc3RpbmcgdXNlcidzIGFjY2VzcyBsZXZlbC48L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJ2aWV3ZXJJZCI+VGhlIElEIG9mIHRoZSByZXF1ZXN0aW5nIHVzZXIuPC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5BbiBBbGJ1bUZ1bGxEdG8gb2JqZWN0LjwvcmV0dXJucz4KICAgIHB1YmxpYyBzdGF0aWMgQWxidW1GdWxsRHRvIFRvQWxidW1GdWxsRHRvKHRoaXMgQWxidW0gYWxidW0sIEVBY2Nlc3NMZXZlbCBhY2Nlc3NMZXZlbCwgR3VpZD8gdmlld2VySWQpID0+IG5ldyBBbGJ1bUZ1bGxEdG8gewogICAgICAgIElkICAgICAgICAgICA9IGFsYnVtLklkLAogICAgICAgIE5hbWUgICAgICAgICA9IGFsYnVtLlRpdGxlLAogICAgICAgIFBlcnNvbiAgICAgICA9IGFsYnVtLlBlcnNvbk93bmVySWQsCiAgICAgICAgUGVyc29uTmFtZSAgID0gYWxidW0uUGVyc29uT3duZXI/Lk5hbWUsCiAgICAgICAgQ292ZXJBc3NldElkID0gYWxidW0uQ292ZXJBc3NldElkLAogICAgICAgIEFzc2V0Q291bnQgICA9IGFsYnVtLkFzc2V0cz8uQ291bnQoYSA9PiBhLkRlbGV0ZWRBdCA9PSBudWxsKSA/PyAwLAogICAgICAgIFZpc2liaWxpdHkgICA9IGFjY2Vzc0xldmVsID49IEVBY2Nlc3NMZXZlbC5NYWludGFpbmVyID8gYWxidW0uVmlzaWJpbGl0eSA6IG51bGwsCiAgICAgICAgRGVsZXRlZEF0ICAgID0gbnVsbCwKICAgICAgICBJbWFnZXMgICAgICAgPSBhbGJ1bS5Bc3NldHM/LlNlbGVjdChhc3NldCA9PiBhc3NldC5JZCkuVG9MaXN0KCkgPz8gW10sCiAgICAgICAgQXNzZXRQcmV2aWV3cyA9IGFsYnVtLkFzc2V0cz8uU2VsZWN0KGFzc2V0ID0+IG5ldyBBbGJ1bUFzc2V0UHJldmlld0R0byB7CiAgICAgICAgICAgIElkICAgICAgICAgICAgICAgPSBhc3NldC5JZCwKICAgICAgICAgICAgUmVzb2x1dGlvbldpZHRoICA9IGFzc2V0LlJlc29sdXRpb25XaWR0aCwKICAgICAgICAgICAgUmVzb2x1dGlvbkhlaWdodCA9IGFzc2V0LlJlc29sdXRpb25IZWlnaHQsCiAgICAgICAgICAgIEhhc1RodW1ibmFpbCAgICAgPSAhc3RyaW5nLklzTnVsbE9yRW1wdHkoYXNzZXQuVGh1bWJuYWlsUGF0aCksCiAgICAgICAgICAgIEhhc1ByZXZpZXcgICAgICAgPSAhc3RyaW5nLklzTnVsbE9yRW1wdHkoYXNzZXQuUHJldmlld1BhdGgpLAogICAgICAgICAgICBGaWxlTmFtZSAgICAgICAgID0gYWNjZXNzTGV2ZWwgPj0gRUFjY2Vzc0xldmVsLkN1cmF0b3IgPyBhc3NldC5PcmlnaW5hbEZpbGVuYW1lIDogbnVsbCwKICAgICAgICAgICAgVmlzaWJpbGl0eSAgICAgICA9IGFjY2Vzc0xldmVsID49IEVBY2Nlc3NMZXZlbC5NYWludGFpbmVyID8gYXNzZXQuVmlzaWJpbGl0eSA6IG51bGwsCiAgICAgICAgICAgIERlbGV0ZWRBdCAgICAgICAgPSBhY2Nlc3NMZXZlbCA+PSBFQWNjZXNzTGV2ZWwuQWRtaW4gfHwgYXNzZXQuVXBsb2FkZWRCeSA9PSB2aWV3ZXJJZCA/IGFzc2V0LkRlbGV0ZWRBdCA6IG51bGwKICAgICAgICB9KS5Ub0xpc3QoKSA/PyBbXQogICAgfTsKCn0K
\ No newline at end of file