using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using WatchIt.Common.Model.Series; using WatchIt.Database; using WatchIt.WebAPI.Services.Controllers.Series; namespace WatchIt.WebAPI.Controllers; [ApiController] [Route("series")] public class SeriesController : ControllerBase { #region SERVICES private readonly ISeriesControllerService _seriesControllerService; #endregion #region CONSTRUCTORS public SeriesController(ISeriesControllerService seriesControllerService) { _seriesControllerService = seriesControllerService; } #endregion #region PUBLIC METHODS #region Main [HttpGet] [AllowAnonymous] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task GetAllSeries(SeriesQueryParameters query) => await _seriesControllerService.GetAllSeries(query); [HttpGet("{id}")] [AllowAnonymous] [ProducesResponseType(typeof(SeriesResponse), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetSeries([FromRoute] long id) => await _seriesControllerService.GetSeries(id); [HttpPost] [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [ProducesResponseType(typeof(SeriesResponse), StatusCodes.Status201Created)] [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)] [ProducesResponseType(typeof(void), StatusCodes.Status403Forbidden)] public async Task PostSeries([FromBody] SeriesRequest body) => await _seriesControllerService.PostSeries(body); [HttpPut("{id}")] [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [ProducesResponseType(typeof(void), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)] [ProducesResponseType(typeof(void), StatusCodes.Status403Forbidden)] public async Task PutSeries([FromRoute] long id, [FromBody]SeriesRequest body) => await _seriesControllerService.PutSeries(id, body); [HttpDelete("{id}")] [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [ProducesResponseType(typeof(void), StatusCodes.Status204NoContent)] [ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)] [ProducesResponseType(typeof(void), StatusCodes.Status403Forbidden)] public async Task DeleteSeries([FromRoute] long id) => await _seriesControllerService.DeleteSeries(id); #endregion #endregion }