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