using Asp.Versioning; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Server.Dto.Request; using Server.Dto.Response; using Server.IServices; namespace Server.Controller.v1 { [ApiController] [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]")] public class TrainingProgramsController : ControllerBase { private readonly ILogger _logger; private readonly ITrainingProgramService _dataServices; public TrainingProgramsController(ILogger logger, ITrainingProgramService dataServices) { _logger = logger; _dataServices = dataServices; } [HttpGet] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status204NoContent)] [AllowAnonymous] public async Task GetTrainingPrograms([FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 5, [FromQuery] bool ascending = true) { var programs = await _dataServices.GetTrainingPrograms(pageIndex, pageSize, ascending); return programs.TotalCount == 0 ? NoContent() : Ok(programs); } [HttpGet("{id}")] [ProducesResponseType(typeof(ResponseTrainingProgramDto), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [AllowAnonymous] public async Task GetTrainingProgramById(string id) { var program = await _dataServices.GetTrainingProgramById(id); return program == null ? NotFound() : Ok(program); } [HttpPost] [ProducesResponseType(typeof(ResponseTrainingProgramDto), StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [AllowAnonymous] public async Task CreateTrainingProgram([FromBody] RequestTrainingProgramDto request) { if (!ModelState.IsValid) return BadRequest(ModelState); var createdProgram = await _dataServices.CreateTrainingProgram(request); return CreatedAtAction(nameof(GetTrainingProgramById), new { id = createdProgram.Id }, createdProgram); } [HttpPut("{id}")] [ProducesResponseType(typeof(ResponseTrainingProgramDto), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [AllowAnonymous] public async Task UpdateTrainingProgram(string id, [FromBody] RequestTrainingProgramDto request) { if (!ModelState.IsValid) return BadRequest(ModelState); var updatedProgram = await _dataServices.UpdateTrainingProgram(id, request); return updatedProgram == null ? NotFound() : Ok(updatedProgram); } [HttpDelete("{id}")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] [AllowAnonymous] public async Task DeleteTrainingProgram(string id) { var deleted = await _dataServices.DeleteTrainingProgram(id); return deleted ? NoContent() : NotFound(); } } }