You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RegisterUserHandler.cs 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.Interfaces;
  3. using Diligent.WebAPI.Data.Entities;
  4. using Diligent.WebAPI.Host.DTOs.Customer;
  5. using Diligent.WebAPI.Host.Mediator.Authentication.Commands;
  6. using MediatR;
  7. using Microsoft.AspNetCore.Identity;
  8. namespace Diligent.WebAPI.Host.Mediator.Authentication.Handlers
  9. {
  10. public class RegisterUserHandler : IRequestHandler<RegisterUserCommand, CustomerReadDTO>
  11. {
  12. private readonly UserManager<Customer> _customerManager;
  13. private readonly IAuthenticationService _authenticationService;
  14. private readonly IMapper _mapper;
  15. public RegisterUserHandler(UserManager<Customer> customerManager,IAuthenticationService authenticationService,
  16. IMapper mapper)
  17. {
  18. _customerManager = customerManager;
  19. _authenticationService = authenticationService;
  20. _mapper = mapper;
  21. }
  22. public async Task<CustomerReadDTO> Handle(RegisterUserCommand request, CancellationToken cancellationToken)
  23. {
  24. var customerCreateDTO = request.CustomerCreateDTO;
  25. Customer customer = new()
  26. {
  27. FirstName = customerCreateDTO.FirstName,
  28. LastName = customerCreateDTO.LastName,
  29. Email = customerCreateDTO.Email,
  30. UserName = customerCreateDTO.Username
  31. };
  32. var result = await _customerManager.CreateAsync(customer, customerCreateDTO.Password);
  33. await _customerManager.AddToRoleAsync(customer, "Support");
  34. await _authenticationService.ValidateCustomer(customer.UserName, customerCreateDTO.Password);
  35. var customerReadDTO = _mapper.Map<CustomerReadDTO>(customer);
  36. customerReadDTO.Token = await _authenticationService.GenerateToken();
  37. customerReadDTO.Roles = (List<string>)await _customerManager.GetRolesAsync(customer);
  38. return customerReadDTO;
  39. }
  40. }
  41. }