using Hutopy.Application.Common.Interfaces; namespace Hutopy.Application.Users.Queries.GetCurrentUser; public record GetCurrentUserQuery : IRequest; public class GetCurrentUserQueryHandler( IApplicationDbContext context, IMapper mapper, IIdentityService identityService ) : IRequestHandler { public async Task Handle(GetCurrentUserQuery request, CancellationToken cancellationToken) { var identityUser = await identityService.GetCurrentUserAsync(); var currentUserId = Guid.Parse(identityUser!.Id!); var transactions = await context.UserTransactions .Where(x => x.ApplicationUserId == currentUserId.ToString()) .OrderBy(x => x.LastModified) .ProjectTo(mapper.ConfigurationProvider) .Where(x => x.IsConfirmed == true) .ToListAsync(cancellationToken); var roles = await identityService.GetCurrentUserRolesAsync(); var user = new UserDto { Id = currentUserId, FirstName = identityUser?.FirstName ?? "", LastName = identityUser?.LastName ?? "", UserName = identityUser?.UserName ?? "", UserTransactions = transactions, TotalBalance = transactions.Sum(x => x.Amount), UserRoles = roles }; return user; } }