feat: update PersonMapper — pass viewerId to album mapper
This commit is contained in:
@@ -1,54 +1 @@
|
||||
using Butter.Dtos.Album;
|
||||
using Butter.Dtos.Person;
|
||||
using Butter.Types;
|
||||
using Lactose.Models;
|
||||
|
||||
namespace Lactose.Mapper;
|
||||
|
||||
/// <summary>
|
||||
/// Provides mapping methods for converting Person objects to DTOs.
|
||||
/// </summary>
|
||||
public static class PersonMapper {
|
||||
/// <summary>
|
||||
/// Maps a Person to a PersonDetailedDto with album previews and stats.
|
||||
/// </summary>
|
||||
/// <param name="person">The person to map.</param>
|
||||
/// <param name="accessLevel">The requesting user's access level.</param>
|
||||
/// <returns>A PersonDetailedDto.</returns>
|
||||
public static PersonDetailedDto ToPersonDetailedDto(this Person person, EAccessLevel accessLevel) {
|
||||
var albums = person.Albums ?? [];
|
||||
var maintainers = person.Maintainers ?? [];
|
||||
|
||||
return new PersonDetailedDto {
|
||||
Id = person.Id,
|
||||
Name = person.Name,
|
||||
ProfileAssetId = person.ProfileAssetId,
|
||||
ProfileCropX = person.ProfileCropX,
|
||||
ProfileCropY = person.ProfileCropY,
|
||||
ProfileCropZoom = person.ProfileCropZoom,
|
||||
TotalAlbums = albums.Count,
|
||||
TotalAssets = albums.Sum(a => a.Assets?.Count(asset => asset.DeletedAt == null) ?? 0),
|
||||
Visibility = accessLevel >= EAccessLevel.Maintainer ? person.Visibility : null,
|
||||
Albums = albums.Select(a => a.ToAlbumPreviewDto(accessLevel)).ToList(),
|
||||
MaintainerUserIds = maintainers.Select(u => u.Id).ToList(),
|
||||
MaintainerUsernames = maintainers.Select(u => u.Username).ToList()
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Maps a Person to a PersonPreviewDto.
|
||||
/// </summary>
|
||||
/// <param name="person">The person to map.</param>
|
||||
/// <param name="accessLevel">The requesting user's access level.</param>
|
||||
/// <returns>A PersonPreviewDto.</returns>
|
||||
public static PersonPreviewDto ToPersonPreviewDto(this Person person, EAccessLevel accessLevel) => new() {
|
||||
Id = person.Id,
|
||||
Name = person.Name,
|
||||
ProfileAssetId = person.ProfileAssetId,
|
||||
ProfileCropX = person.ProfileCropX,
|
||||
ProfileCropY = person.ProfileCropY,
|
||||
ProfileCropZoom = person.ProfileCropZoom,
|
||||
TotalAlbums = person.Albums?.Count ?? 0,
|
||||
Visibility = accessLevel >= EAccessLevel.Maintainer ? person.Visibility : null
|
||||
};
|
||||
}
|
||||
dXNpbmcgQnV0dGVyLkR0b3MuQWxidW07CnVzaW5nIEJ1dHRlci5EdG9zLlBlcnNvbjsKdXNpbmcgQnV0dGVyLlR5cGVzOwp1c2luZyBMYWN0b3NlLk1vZGVsczsKCm5hbWVzcGFjZSBMYWN0b3NlLk1hcHBlcjsKCi8vLyA8c3VtbWFyeT4KLy8vIFByb3ZpZGVzIG1hcHBpbmcgbWV0aG9kcyBmb3IgY29udmVydGluZyBQZXJzb24gb2JqZWN0cyB0byBEVE9zLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgc3RhdGljIGNsYXNzIFBlcnNvbk1hcHBlciB7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gTWFwcyBhIFBlcnNvbiB0byBhIFBlcnNvbkRldGFpbGVkRHRvIHdpdGggYWxidW0gcHJldmlld3MgYW5kIHN0YXRzLgogICAgLy8vIDwvc3VtbWFyeT4KICAgIC8vLyA8cGFyYW0gbmFtZT0icGVyc29uIj5UaGUgcGVyc29uIHRvIG1hcC48L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJhY2Nlc3NMZXZlbCI+VGhlIHJlcXVlc3RpbmcgdXNlcidzIGFjY2VzcyBsZXZlbC48L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJ2aWV3ZXJJZCI+VGhlIElEIG9mIHRoZSByZXF1ZXN0aW5nIHVzZXIuPC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5BIFBlcnNvbkRldGFpbGVkRHRvLjwvcmV0dXJucz4KICAgIHB1YmxpYyBzdGF0aWMgUGVyc29uRGV0YWlsZWREdG8gVG9QZXJzb25EZXRhaWxlZER0byh0aGlzIFBlcnNvbiBwZXJzb24sIEVBY2Nlc3NMZXZlbCBhY2Nlc3NMZXZlbCwgR3VpZD8gdmlld2VySWQgPSBudWxsKSB7CiAgICAgICAgdmFyIGFsYnVtcyA9IHBlcnNvbi5BbGJ1bXMgPz8gW107CiAgICAgICAgdmFyIG1haW50YWluZXJzID0gcGVyc29uLk1haW50YWluZXJzID8/IFtdOwoKICAgICAgICByZXR1cm4gbmV3IFBlcnNvbkRldGFpbGVkRHRvIHsKICAgICAgICAgICAgSWQgICAgICAgICAgICAgPSBwZXJzb24uSWQsCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0gcGVyc29uLk5hbWUsCiAgICAgICAgICAgIFByb2ZpbGVBc3NldElkID0gcGVyc29uLlByb2ZpbGVBc3NldElkLAogICAgICAgICAgICBQcm9maWxlQ3JvcFggICA9IHBlcnNvbi5Qcm9maWxlQ3JvcFgsCiAgICAgICAgICAgIFByb2ZpbGVDcm9wWSAgID0gcGVyc29uLlByb2ZpbGVDcm9wWSwKICAgICAgICAgICAgUHJvZmlsZUNyb3Bab29tID0gcGVyc29uLlByb2ZpbGVDcm9wWm9vbSwKICAgICAgICAgICAgVG90YWxBbGJ1bXMgICAgPSBhbGJ1bXMuQ291bnQsCiAgICAgICAgICAgIFRvdGFsQXNzZXRzICAgID0gYWxidW1zLlN1bShhID0+IGEuQXNzZXRzPy5Db3VudChhc3NldCA9PiBhc3NldC5EZWxldGVkQXQgPT0gbnVsbCkgPz8gMCksCiAgICAgICAgICAgIFZpc2liaWxpdHkgICAgID0gYWNjZXNzTGV2ZWwgPj0gRUFjY2Vzc0xldmVsLk1haW50YWluZXIgPyBwZXJzb24uVmlzaWJpbGl0eSA6IG51bGwsCiAgICAgICAgICAgIEFsYnVtcyAgICAgICAgID0gYWxidW1zLlNlbGVjdChhID0+IGEuVG9BbGJ1bVByZXZpZXdEdG8oYWNjZXNzTGV2ZWwsIHZpZXdlcklkKSkuVG9MaXN0KCksCiAgICAgICAgICAgIE1haW50YWluZXJVc2VySWRzICAgPSBtYWludGFpbmVycy5TZWxlY3QodSA9PiB1LklkKS5Ub0xpc3QoKSwKICAgICAgICAgICAgTWFpbnRhaW5lclVzZXJuYW1lcyA9IG1haW50YWluZXJzLlNlbGVjdCh1ID0+IHUuVXNlcm5hbWUpLlRvTGlzdCgpCiAgICAgICAgfTsKICAgIH0KCiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gTWFwcyBhIFBlcnNvbiB0byBhIFBlcnNvblByZXZpZXdEdG8uCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJwZXJzb24iPlRoZSBwZXJzb24gdG8gbWFwLjwvcGFyYW0+CiAgICAvLy8gPHBhcmFtIG5hbWU9ImFjY2Vzc0xldmVsIj5UaGUgcmVxdWVzdGluZyB1c2VyJ3MgYWNjZXNzIGxldmVsLjwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSBQZXJzb25QcmV2aWV3RHRvLjwvcmV0dXJucz4KICAgIHB1YmxpYyBzdGF0aWMgUGVyc29uUHJldmlld0R0byBUb1BlcnNvblByZXZpZXdEdG8odGhpcyBQZXJzb24gcGVyc29uLCBFQWNjZXNzTGV2ZWwgYWNjZXNzTGV2ZWwpID0+IG5ldygpIHsKICAgICAgICBJZCAgICAgICAgICAgICA9IHBlcnNvbi5JZCwKICAgICAgICBOYW1lICAgICAgICAgICA9IHBlcnNvbi5OYW1lLAogICAgICAgIFByb2ZpbGVBc3NldElkID0gcGVyc29uLlByb2ZpbGVBc3NldElkLAogICAgICAgIFByb2ZpbGVDcm9wWCAgID0gcGVyc29uLlByb2ZpbGVDcm9wWCwKICAgICAgICBQcm9maWxlQ3JvcFkgICA9IHBlcnNvbi5Qcm9maWxlQ3JvcFksCiAgICAgICAgUHJvZmlsZUNyb3Bab29tID0gcGVyc29uLlByb2ZpbGVDcm9wWm9vbSwKICAgICAgICBUb3RhbEFsYnVtcyAgICA9IHBlcnNvbi5BbGJ1bXM/LkNvdW50ID8/IDAsCiAgICAgICAgVmlzaWJpbGl0eSAgICAgPSBhY2Nlc3NMZXZlbCA+PSBFQWNjZXNzTGV2ZWwuTWFpbnRhaW5lciA/IHBlcnNvbi5WaXNpYmlsaXR5IDogbnVsbAogICAgfTsKfQo=
|
||||
Reference in New Issue
Block a user