Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using BlackRock.Reporting.API.Controllers.Model;
  2. using BlackRock.Reporting.API.Mediator.UserMediator.Commands;
  3. using BlackRock.Reporting.API.Mediator.UserMediator.Queries;
  4. using MediatR;
  5. using Microsoft.AspNetCore.Authorization;
  6. using Microsoft.AspNetCore.Mvc;
  7. namespace BlackRock.Reporting.API.Controllers
  8. {
  9. [Authorize]
  10. [Route("api/users")]
  11. public class UsersController : Controller
  12. {
  13. private readonly IMediator mediator;
  14. public UsersController(IMediator mediator)
  15. {
  16. this.mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));
  17. }
  18. // GET: api/users/1
  19. [HttpGet]
  20. [Route("{id}")]
  21. public async Task<IActionResult> GetUser(int id)
  22. {
  23. var result = await mediator.Send(new GetUserQuery { Id = id });
  24. if (!result.IsSuccess)
  25. return BadRequest(result.Error);
  26. if (result.Data == null)
  27. return NotFound("Id is not valid");
  28. return Ok(result.Data);
  29. }
  30. // GET: api/users?Page=2&PageSize=25
  31. [HttpGet]
  32. public async Task<IActionResult> GetAllUsers(GetAllUsersQuery query)
  33. {
  34. var result = await mediator.Send(query);
  35. if (!result.IsSuccess)
  36. return BadRequest(result.Error);
  37. if (result.Data == null)
  38. return NotFound();
  39. return Ok(result.Data);
  40. }
  41. // POST: api/users
  42. [HttpPost]
  43. public async Task<IActionResult> CreateUser([FromBody] CreateUserCommand user)
  44. {
  45. if (!ModelState.IsValid)
  46. return BadRequest(ModelState);
  47. var result = await mediator.Send(user);
  48. if (!result.IsSuccess)
  49. return BadRequest(result.Error);
  50. // return Created(Url.Action(nameof(Get), result.Data), result.Data);
  51. return Ok(result.Data);
  52. }
  53. // PUT: api/users/1
  54. [HttpPut]
  55. [Route("{id}")]
  56. public async Task<IActionResult> UpdateUser(int id, [FromBody] UpdateUserCommand user)
  57. {
  58. if (!ModelState.IsValid)
  59. return BadRequest(ErrorResponse.Validation(ModelState));
  60. user.Id = id;
  61. var result = await mediator.Send(user);
  62. if (!result.IsSuccess)
  63. return BadRequest(result.Error);
  64. return Accepted();
  65. }
  66. // PATCH: api/users/1/email
  67. [HttpPatch]
  68. [Route("{id}/email")]
  69. public async Task<IActionResult> UpdateUserEmail(int id, [FromBody] UpdateUserEmailCommand user)
  70. {
  71. if (!ModelState.IsValid)
  72. return BadRequest(ErrorResponse.Validation(ModelState));
  73. user.Id = id;
  74. var result = await mediator.Send(user);
  75. if (!result.IsSuccess)
  76. return BadRequest(result.Error);
  77. return Accepted();
  78. }
  79. // DELETE: api/users/1
  80. [HttpDelete]
  81. [Route("{id}")]
  82. public async Task<IActionResult> DeleteUser(int id)
  83. {
  84. if (!ModelState.IsValid)
  85. return BadRequest(ErrorResponse.Validation(ModelState));
  86. var result = await mediator.Send(new DeleteUsersCommand { Id = id });
  87. if (!result.IsSuccess)
  88. return BadRequest(result.Error);
  89. return NoContent();
  90. }
  91. }
  92. // I/O
  93. // Output: DTO : Entity wraper, Agregations
  94. // Input: Query / Form
  95. }