ToDoController.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using AutoMapper;
  4. using Microsoft.AspNetCore.Mvc;
  5. using ToDoManagementSystem.Domain.Entities;
  6. using ToDoManagementSystem.Interfaces;
  7. using ToDoManagementSystem.Models.DTO;
  8. namespace ToDoManagementSystem.Controllers
  9. {
  10. [Route("api/[controller]")]
  11. [ApiController]
  12. public class ToDoController : ControllerBase
  13. {
  14. private readonly IRepository _repository;
  15. private readonly IMapper _mapper;
  16. public ToDoController(IRepository repository, IMapper mapper)
  17. {
  18. _repository = repository;
  19. _mapper = mapper;
  20. }
  21. [HttpGet()]
  22. public async Task<IActionResult> List()
  23. {
  24. var items = await _repository.List<ToDoItem>();
  25. //items = items?.OrderBy(x => x.IsDone).ThenByDescending(y => y.CreatedDate)?.ToList();
  26. var model = items?.Select(x => _mapper.Map<ToDoItem, ToDoItemDTO>(x));
  27. return Ok(model);
  28. }
  29. [HttpGet("{id}")]
  30. public async Task<IActionResult> GetById([FromRoute] int id)
  31. {
  32. var item = await _repository.GetById<ToDoItem>(id);
  33. var model = _mapper.Map<ToDoItem, ToDoItemDTO>(item);
  34. return Ok(model);
  35. }
  36. [HttpPost]
  37. public async Task<IActionResult> Post([FromBody] ToDoItemDTO item)
  38. {
  39. if (!ModelState.IsValid)
  40. {
  41. return new BadRequestObjectResult(ModelState);
  42. }
  43. item.Id = 0;
  44. var data = _mapper.Map<ToDoItemDTO, ToDoItem>(item);
  45. var model = await _repository.Add(data);
  46. return Ok(_mapper.Map<ToDoItem, ToDoItemDTO>(model));
  47. }
  48. [HttpPut]
  49. public async Task<IActionResult> Put([FromBody] ToDoItemDTO item)
  50. {
  51. if (item.Id == 0)
  52. ModelState.AddModelError(nameof(item.Id), "This is required.");
  53. if (!ModelState.IsValid)
  54. return new BadRequestObjectResult(ModelState);
  55. var data = await _repository.GetById<ToDoItem>(item.Id);
  56. if (data == null)
  57. return NotFound();
  58. //To do : include automapper here
  59. data.Description = item.Description;
  60. data.IsDone = item.IsDone;
  61. await _repository.Update(data);
  62. // var temp = _mapper.Map<ToDoItemDTO, ToDoItem>(item);
  63. // await _repository.Update(temp);
  64. var model = _mapper.Map<ToDoItem, ToDoItemDTO>(data);
  65. return Ok(model);
  66. }
  67. [HttpDelete("{id}")]
  68. public async Task<IActionResult> Delete([FromRoute] int id)
  69. {
  70. var item = await _repository.GetById<ToDoItem>(id);
  71. if (item == null)
  72. {
  73. return NotFound();
  74. }
  75. await _repository.Delete(item);
  76. return Ok();
  77. }
  78. }
  79. }