using Ardalis.Result; using Ardalis.Result.AspNetCore; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using WatchIt.DTO.Models.Controllers.Genres.Genre; using WatchIt.DTO.Query; using WatchIt.WebAPI.BusinessLogic.Genres; using WatchIt.WebAPI.Constants; namespace WatchIt.WebAPI.Controllers; [ApiController] [Route("genres")] public class GenresController(IGenresBusinessLogic genresBusinessLogic) : ControllerBase { [HttpGet] [AllowAnonymous] [TranslateResultToActionResult] public async Task>> GetGenres([FromQuery] GenreFilterQuery filterQuery, [FromQuery] OrderQuery orderQuery, [FromQuery] PagingQuery pagingQuery) => await genresBusinessLogic.GetGenres(filterQuery, orderQuery, pagingQuery); [HttpGet("{id}")] [AllowAnonymous] [TranslateResultToActionResult] public async Task> GetGenre([FromRoute(Name = "id")] short id) => await genresBusinessLogic.GetGenre(id); [HttpPost] [Authorize(Policy = Policies.Admin)] [TranslateResultToActionResult] public async Task> PostGenre([FromBody] GenreRequest body) => await genresBusinessLogic.PostGenre(body); [HttpDelete("{id}")] [Authorize(Policy = Policies.Admin)] [TranslateResultToActionResult] public async Task DeleteGenre([FromRoute(Name = "id")] short id) => await genresBusinessLogic.DeleteGenre(id); }