using Domain.Entities; using Features.Auth.Repository; using Features.ImageUploads.Commands.UploadPhoto; using MediatR; namespace Features.Auth.Commands.UploadAvatar; /// /// Handles : uploads the photo via , /// then saves the record, replacing any existing avatar for the user. /// public class UploadAvatarHandler( IMediator mediator, IUserAvatarRepository userAvatarRepository, IUserProfileRepository userProfileRepository ) : IRequestHandler { public async Task Handle(UploadAvatarCommand request, CancellationToken cancellationToken) { Guid photoId = await mediator.Send( new UploadPhotoCommand( request.UserAccountId, $"avatars/{request.UserAccountId}", request.File ), cancellationToken ); Guid profileId = await userProfileRepository.GetOrCreateProfileIdAsync( request.UserAccountId, cancellationToken ); UserAvatar avatar = new() { UserAvatarId = Guid.NewGuid(), UserProfileId = profileId, PhotoId = photoId, }; await userAvatarRepository.SaveAsync(avatar, cancellationToken); return photoId; } }