Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

RequestController.cs 3.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.Services;
  3. using Diligent.WebAPI.Data.Entities;
  4. using Diligent.WebAPI.Host.DTOs.Customer;
  5. using Diligent.WebAPI.Host.DTOs.Request;
  6. using Diligent.WebAPI.Host.Exceptions;
  7. using Diligent.WebAPI.Host.Mediator.Request.Commands;
  8. using Diligent.WebAPI.Host.Mediator.Request.Queries;
  9. using MediatR;
  10. using Microsoft.AspNetCore.Mvc;
  11. namespace Diligent.WebAPI.Host.Controllers
  12. {
  13. [ApiVersion("1.0")]
  14. [ApiController]
  15. [Route("v{version:apiVersion}/[controller]")]
  16. public class RequestController:ControllerBase
  17. {
  18. private readonly RequestService _requestService;
  19. private readonly IMapper _mapper;
  20. private readonly IMediator _mediator;
  21. public RequestController(RequestService requestService,IMapper mapper,IMediator mediator)
  22. {
  23. _requestService = requestService;
  24. _mapper = mapper;
  25. _mediator = mediator;
  26. }
  27. [HttpGet]
  28. public async Task<ActionResult> GetRequests()
  29. {
  30. return Ok(await _requestService.GetRequestsAsync());
  31. }
  32. [HttpGet("{id}")]
  33. public async Task<ActionResult> GetRequestById(string id)
  34. {
  35. if (id == null)
  36. {
  37. throw new BadHttpRequestException("Id cannot be null");
  38. }
  39. var request = await _requestService.GetRequestAsync(id);
  40. if (request == null)
  41. {
  42. throw new NotFoundException("Request not found");
  43. }
  44. return Ok(request);
  45. }
  46. // get all rooms for which exist at least one request from customer
  47. [HttpGet("request-rooms")]
  48. public async Task<ActionResult<List<RequestRoomReadDTO>>> GetRoomsForWhichRequestExist() =>
  49. await _mediator.Send(new GetRoomsForWhichRequestExistQuery());
  50. [HttpGet("room-customers")]
  51. public async Task<ActionResult<List<CustomerRequestRoomReadDTO>>> GetCustomersForSpecificRequestRoom(string id) =>
  52. await _mediator.Send(new GetSendersForSpecificRequestRoomQuery(id));
  53. [HttpPost("accept-request")]
  54. public async Task<ActionResult> AcceptCustomerRequest(AcceptCustomerDTO acceptCustomerDTO)
  55. {
  56. var id = await _mediator.Send(new AcceptCustomerRequestCommand(acceptCustomerDTO.customerId, acceptCustomerDTO.roomId));
  57. return Ok(id);
  58. }
  59. [HttpPost("reject-request")]
  60. public async Task<ActionResult> RejectCustomerRequest(AcceptCustomerDTO acceptCustomerDTO)
  61. {
  62. var id = await _mediator.Send(new RejectCustomerRequestCommand(acceptCustomerDTO.customerId, acceptCustomerDTO.roomId));
  63. return Ok(id);
  64. }
  65. [HttpPost("join-request")]
  66. public async Task<IActionResult> CreateRequest(RequestCreateDTO resource)
  67. {
  68. if (resource == null)
  69. throw new BadHttpRequestException("Resource object cannot be null.");
  70. var room = _mapper.Map<Request>(resource);
  71. await _requestService.CreateRequestAsync(room);
  72. return CreatedAtAction(nameof(RequestController.CreateRequest), new { id = room.Id }, room);
  73. }
  74. }
  75. }