using Microsoft.AspNetCore.Mvc; using Server.Dto.Request; using Server.Dto.Response; using Asp.Versioning; using Server.IServices; using Shared.Criteria; namespace Server.Controller.v1; [ApiController] [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]")] public class ExperiencesController : ControllerBase { private readonly ILogger _logger; private readonly IExperiencesService _dataServices; public ExperiencesController(ILogger logger, IExperiencesService dataServices) { _logger = logger; _dataServices = dataServices; } [HttpGet] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status204NoContent)] [RequireHttps] public async Task GetExperiences([FromQuery] string? title, [FromQuery] int page = 1, [FromQuery] int size = 5, [FromQuery] ExperienceOrderCriteria criteria = ExperienceOrderCriteria.StartDate, [FromQuery] bool ascending = true) { var result = await _dataServices.GetExperiences(title, page, size, criteria, ascending); if (result.Count == 0) return NoContent(); return Ok(result.Experiences); } [HttpGet("{id}")] [ProducesResponseType(typeof(ResponseExperienceDto), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [RequireHttps] public IActionResult GetExperienceById(string id) { var experience = _dataServices.GetExperienceById(id); return experience.Result == null ? NotFound() : Ok(experience.Result); } [HttpPost] [ProducesResponseType(typeof(ResponseExperienceDto), StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [RequireHttps] public IActionResult CreateExperience([FromBody] RequestExperienceDto experienceDto) { var experience = _dataServices.CreateExperience(experienceDto); return experience.Result == null ? BadRequest() : CreatedAtAction(nameof(CreateExperience), experience.Result); } [HttpPut("{id}")] [ProducesResponseType(typeof(ResponseExperienceDto), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [RequireHttps] public IActionResult UpdateExperience(string id, [FromBody] RequestExperienceDto experience) { var experienceSelected = _dataServices.UpdateExperience(id, experience); return experienceSelected.Result == null ? BadRequest() : Ok(experienceSelected.Result); } [HttpDelete("{id}")] [ProducesResponseType(typeof(bool), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [RequireHttps] public IActionResult DeleteExperience(string id) { return _dataServices.DeleteExperience(id).Result ? Ok() : NotFound(); } [HttpGet("Alica/{id}")] [ProducesResponseType(typeof(IEnumerable), 200)] [RequireHttps] public IActionResult GetExperiencesByAlumniId(string id) { //var experience = _dataServices.GetData(); //var experienceSelected = experience.Result.Where(x => x.AlicaId == id).ToList(); //return experienceSelected.Count() == 0 ? NoContent() : Ok(experienceSelected); return Ok(); } }