diff --git a/src/Application/Users/Commands/UploadBannerPicture.cs b/src/Application/Users/Commands/UploadBannerPicture.cs index ae8e783..e99f28a 100644 --- a/src/Application/Users/Commands/UploadBannerPicture.cs +++ b/src/Application/Users/Commands/UploadBannerPicture.cs @@ -3,15 +3,25 @@ using Hutopy.Application.Common.Interfaces; namespace Hutopy.Application.Users.Commands; +/// +/// Upload a banner picture. If the user has the url already, set the BannerPictureUrl in the user only without upload. +/// public class UploadBannerPictureCommand : IRequest { public required Stream BannerPicture { get; init; } + public string BannerPictureUrl { get; init; } = string.Empty; } public class UploadBannerPictureCommandHandler(IIdentityService identityService, IAzureBlobStorageService azureBlobStorageService) : IRequestHandler { public async Task Handle(UploadBannerPictureCommand request, CancellationToken cancellationToken) { + if (!string.IsNullOrEmpty(request.BannerPictureUrl)) + { + await identityService.UpdateCurrentUserBannerPictureUrlAsync(request.BannerPictureUrl); + return request.BannerPictureUrl; + } + var identityUser = await identityService.GetCurrentUserAsync(); var currentUserId = new Guid(identityUser?.Id ?? "").ToString(); diff --git a/src/Application/Users/Commands/UploadProfilePicture.cs b/src/Application/Users/Commands/UploadProfilePicture.cs index 154ace7..ae15d31 100644 --- a/src/Application/Users/Commands/UploadProfilePicture.cs +++ b/src/Application/Users/Commands/UploadProfilePicture.cs @@ -3,15 +3,25 @@ using Hutopy.Application.Common.Interfaces; namespace Hutopy.Application.Users.Commands; +/// +/// Upload a profile picture. If the user has the url already, set the ProfilePictureUrl in the user only without upload. +/// public class UploadProfilePictureCommand : IRequest { public required Stream ProfilePicture { get; init; } + public string ProfilePictureUrl { get; init; } = string.Empty; } public class UploadProfilePictureCommandHandler(IIdentityService identityService, IAzureBlobStorageService azureBlobStorageService) : IRequestHandler { public async Task Handle(UploadProfilePictureCommand request, CancellationToken cancellationToken) { + if (!string.IsNullOrEmpty(request.ProfilePictureUrl)) + { + await identityService.UpdateCurrentUserProfilePictureUrlAsync(request.ProfilePictureUrl); + return request.ProfilePictureUrl; + } + var identityUser = await identityService.GetCurrentUserAsync(); var currentUserId = new Guid(identityUser?.Id ?? "").ToString(); diff --git a/src/Application/Users/Commands/UploadWebsiteIcon.cs b/src/Application/Users/Commands/UploadWebsiteIcon.cs index 26caa25..31f3f5f 100644 --- a/src/Application/Users/Commands/UploadWebsiteIcon.cs +++ b/src/Application/Users/Commands/UploadWebsiteIcon.cs @@ -3,15 +3,26 @@ using Hutopy.Application.Common.Interfaces; namespace Hutopy.Application.Users.Commands; +/// +/// Upload a website icon. If the user has the url already, set the WebsitePictureUrl in the user only without upload. +/// public class UploadWebsiteIconCommand : IRequest { public required Stream WebsiteIcon { get; init; } + + public string WebsitePictureUrl { get; init; } = string.Empty; } public class UploadWebsiteIconCommandHandler(IIdentityService identityService, IAzureBlobStorageService azureBlobStorageService) : IRequestHandler { public async Task Handle(UploadWebsiteIconCommand request, CancellationToken cancellationToken) { + if (!string.IsNullOrEmpty(request.WebsitePictureUrl)) + { + await identityService.UpdateCurrentUserWebsiteIconUrlAsync(request.WebsitePictureUrl); + return request.WebsitePictureUrl; + } + var identityUser = await identityService.GetCurrentUserAsync(); var currentUserId = new Guid(identityUser?.Id ?? "").ToString(); diff --git a/src/Application/Users/Queries/GetMinimalUser/GetMinimalUser.cs b/src/Application/Users/Queries/GetMinimalUser/GetMinimalUser.cs index 124e9cf..454e8ae 100644 --- a/src/Application/Users/Queries/GetMinimalUser/GetMinimalUser.cs +++ b/src/Application/Users/Queries/GetMinimalUser/GetMinimalUser.cs @@ -31,9 +31,11 @@ public class GetMinimalUserQueryHandler( var user = new MinimalUserDto { + Id = identityUser?.Id ?? string.Empty, FirstName = identityUser?.FirstName ?? string.Empty, LastName = identityUser?.LastName ?? string.Empty, UserName = identityUser?.UserName ?? string.Empty, + Occupation = identityUser?.Occupation ?? string.Empty, SocialNetworks = identityUser?.SocialNetworks ?? new(), ProfileColors = identityUser?.ProfileColors ?? new(), StoredDataUrls = identityUser?.StoredDataUrls ?? new(), diff --git a/src/Application/Users/Queries/GetMinimalUser/MinimalUserDto.cs b/src/Application/Users/Queries/GetMinimalUser/MinimalUserDto.cs index 7648fa7..a38fd64 100644 --- a/src/Application/Users/Queries/GetMinimalUser/MinimalUserDto.cs +++ b/src/Application/Users/Queries/GetMinimalUser/MinimalUserDto.cs @@ -4,9 +4,11 @@ namespace Hutopy.Application.Users.Queries.GetMinimalUser; public class MinimalUserDto { + public required string Id { get; init; } public required string FirstName { get; init; } public required string LastName { get; init; } public required string UserName { get; init; } = String.Empty; + public required string Occupation { get; init; } = String.Empty; public SocialNetworksModel SocialNetworks { get; init; } = new(); public ProfileColorsModel ProfileColors { get; init; } = new(); diff --git a/src/Web/Endpoints/UpdateMyUser.cs b/src/Web/Endpoints/UpdateMyUser.cs index 9aca4dc..8f13133 100644 --- a/src/Web/Endpoints/UpdateMyUser.cs +++ b/src/Web/Endpoints/UpdateMyUser.cs @@ -19,21 +19,21 @@ public class UpdateMyUser : EndpointGroupBase return await sender.Send(command); } - private static async Task UpdateCurrentUserProfilePicture(ISender sender, Stream stream) + private static async Task UpdateCurrentUserProfilePicture(ISender sender, Stream stream, string url = "") { - var command = new UploadProfilePictureCommand { ProfilePicture = stream }; + var command = new UploadProfilePictureCommand { ProfilePicture = stream, ProfilePictureUrl = url}; return await sender.Send(command); } - private static async Task UpdateCurrentUserBannerPicture(ISender sender, Stream stream) + private static async Task UpdateCurrentUserBannerPicture(ISender sender, Stream stream, string url = "") { - var command = new UploadBannerPictureCommand { BannerPicture = stream }; + var command = new UploadBannerPictureCommand { BannerPicture = stream, BannerPictureUrl = url}; return await sender.Send(command); } - private static async Task UpdateCurrentUserWebsiteIcon(ISender sender, Stream stream) + private static async Task UpdateCurrentUserWebsiteIcon(ISender sender, Stream stream, string url = "") { - var command = new UploadWebsiteIconCommand { WebsiteIcon = stream }; + var command = new UploadWebsiteIconCommand { WebsiteIcon = stream, WebsitePictureUrl = url}; return await sender.Send(command); } }