using AutoMapper; using Imprink.Application.Dtos; using Imprink.Domain.Models; using MediatR; namespace Imprink.Application.Commands.Users; public record SyncUserCommand(Auth0User User) : IRequest; public class SyncUserHandler(IUnitOfWork uw, IMapper mapper): IRequestHandler { public async Task Handle(SyncUserCommand request, CancellationToken cancellationToken) { await uw.BeginTransactionAsync(cancellationToken); try { var user = await uw.UserRepository.UpdateOrCreateUserAsync(request.User, cancellationToken); if (user == null) throw new Exception("User exists but could not be updated"); await uw.SaveAsync(cancellationToken); await uw.CommitTransactionAsync(cancellationToken); return mapper.Map(user); } catch { await uw.RollbackTransactionAsync(cancellationToken); throw; } } }