Backend: - Add MaintainerUserIds to PersonUpdateDto/PersonDetailedDto - Add MaintainedPersonNames to UserInfoDto - Add IPersonRepository.SetMaintainers + implementation - PersonRepository.Find/FindVisible now include Maintainers - PersonController.Update handles maintainer assignment (admin/curator) - Fix PersonController.Update to save Visibility field - Allow curators to list all users via UserController.GetAll Frontend (PersonForm): - Add maintainer search+select UI (admin/curator only in edit mode) - Search users client-side, click to add, badge with X to remove - Saves maintainer IDs on person update Frontend (CosplayerDetail): - Show 'Maintained by: user1, user2' in header with clickable links - Pass maintainer data to PersonForm Frontend (User page): - Show 'Maintainer of: cosplayer1, cosplayer2' with links - Non-admin view: strip Email, Created, Deleted fields - Fix LoadUser to use route UserId instead of logged-in user
59 lines
2.2 KiB
C#
59 lines
2.2 KiB
C#
using Butter.Dtos.Album;
|
||
using Butter.Types;
|
||
|
||
namespace Butter.Dtos.Person;
|
||
|
||
/// <summary>
|
||
/// Represents the full details of a person, including associated albums.
|
||
/// </summary>
|
||
public class PersonDetailedDto {
|
||
/// <summary>
|
||
/// Gets or sets the unique identifier of the person.
|
||
/// </summary>
|
||
public required Guid Id { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the name of the person.
|
||
/// </summary>
|
||
public required string Name { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the asset ID used as the profile picture.
|
||
/// </summary>
|
||
public Guid? ProfileAssetId { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the horizontal crop offset for the profile picture (0–100).
|
||
/// </summary>
|
||
public float? ProfileCropX { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the vertical crop offset for the profile picture (0–100).
|
||
/// </summary>
|
||
public float? ProfileCropY { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the zoom level for the profile picture.
|
||
/// </summary>
|
||
public float? ProfileCropZoom { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the total number of non-deleted albums.
|
||
/// </summary>
|
||
public int TotalAlbums { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the total number of non-deleted assets across all albums.
|
||
/// </summary>
|
||
public int TotalAssets { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the visibility level. Only populated for curators and admins.
|
||
/// </summary>
|
||
public EVisibility? Visibility { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the list of album previews associated with this person.
|
||
/// </summary>
|
||
public List<AlbumPreviewDto>? Albums { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the IDs of users who maintain this person.
|
||
/// </summary>
|
||
public List<Guid>? MaintainerUserIds { get; set; }
|
||
/// <summary>
|
||
/// Gets or sets the usernames of users who maintain this person.
|
||
/// </summary>
|
||
public List<string>? MaintainerUsernames { get; set; }
|
||
}
|