Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

CustomerController.cs 3.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.Services;
  3. using Diligent.WebAPI.Data.Entities;
  4. using Diligent.WebAPI.Host.DTOs.Customer;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Identity;
  7. using Microsoft.AspNetCore.Mvc;
  8. namespace Diligent.WebAPI.Host.Controllers
  9. {
  10. [ApiVersion("1.0")]
  11. [ApiController]
  12. [Route("v{version:apiVersion}/[controller]")]
  13. public class CustomerController : ControllerBase
  14. {
  15. // sifra za svakog od user-a je "Nekasifra123!"
  16. private readonly UserManager<Customer> _customerManager;
  17. private readonly RoleManager<Roles> _roleManager;
  18. private readonly IAuthenticationService _authenticationService;
  19. private readonly IMapper _mapper;
  20. public CustomerController(UserManager<Customer> customerManager, RoleManager<Roles> roleManager,IAuthenticationService authenticationService,
  21. IMapper mapper)
  22. {
  23. _customerManager = customerManager;
  24. _roleManager = roleManager;
  25. _authenticationService = authenticationService;
  26. _mapper = mapper;
  27. }
  28. [HttpPost("login")]
  29. public async Task<ActionResult<CustomerReadDTO>> Login(CustomerLoginDTO customerLoginDTO)
  30. {
  31. if (!await _authenticationService.ValidateCustomer(customerLoginDTO.Username, customerLoginDTO.Password))
  32. return BadRequest("Authentication failed.Wrong Username or password");
  33. Customer customer = await _authenticationService.GetCustomer(customerLoginDTO.Username);
  34. var customerReadDTO = _mapper.Map<CustomerReadDTO>(customer);
  35. customerReadDTO.Token = await _authenticationService.GenerateToken();
  36. customerReadDTO.Roles = (List<string>)await _customerManager.GetRolesAsync(customer);
  37. return customerReadDTO;
  38. }
  39. [HttpPost("addRole")]
  40. public async Task<ActionResult> CreateRole(string name)
  41. {
  42. IdentityResult result = await _roleManager.CreateAsync(new Roles() { Name = name });
  43. if (!result.Succeeded)
  44. {
  45. foreach (IdentityError error in result.Errors)
  46. ModelState.AddModelError("", error.Description);
  47. return BadRequest(ModelState);
  48. }
  49. return StatusCode(201);
  50. }
  51. [HttpPost("register")]
  52. public async Task<ActionResult<CustomerReadDTO>> Register(CustomerCreateDTO customerCreateDTO)
  53. {
  54. Customer customer = new()
  55. {
  56. FirstName = customerCreateDTO.FirstName,
  57. LastName = customerCreateDTO.LastName,
  58. Email = customerCreateDTO.Email,
  59. UserName = customerCreateDTO.Username
  60. };
  61. var result = await _customerManager.CreateAsync(customer, customerCreateDTO.Password);
  62. await _customerManager.AddToRoleAsync(customer, "Customer");
  63. if (!result.Succeeded)
  64. {
  65. foreach (IdentityError error in result.Errors)
  66. ModelState.AddModelError("", error.Description);
  67. return BadRequest(ModelState);
  68. }
  69. await _authenticationService.ValidateCustomer(customer.UserName,customerCreateDTO.Password);
  70. var customerReadDTO = _mapper.Map<CustomerReadDTO>(customer);
  71. customerReadDTO.Token = await _authenticationService.GenerateToken();
  72. customerReadDTO.Roles = (List<string>)await _customerManager.GetRolesAsync(customer);
  73. return customerReadDTO;
  74. }
  75. }
  76. }