using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Roadie.Api.Services; using Roadie.Library.Caching; using Roadie.Library.Identity; using Roadie.Library.Models; using Roadie.Library.Models.Pagination; using Roadie.Library.Models.Playlists; using System; using System.Collections.Generic; using System.Net; using System.Threading.Tasks; using models = Roadie.Library.Models; namespace Roadie.Api.Controllers { [Produces("application/json")] [Route("playlists")] [ApiController] [Authorize] public class PlaylistController : EntityControllerBase { private IPlaylistService PlaylistService { get; } public PlaylistController(IPlaylistService playlistService, ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration, UserManager userManager) : base(cacheManager, configuration, userManager) { this.Logger = logger.CreateLogger("RoadieApi.Controllers.PlaylistController"); this.PlaylistService = playlistService; } [HttpGet("{id}")] [ProducesResponseType(200)] [ProducesResponseType(404)] public async Task Get(Guid id, string inc = null) { var result = await this.PlaylistService.ById(await this.CurrentUserModel(), id, (inc ?? models.Playlists.Playlist.DefaultIncludes).ToLower().Split(",")); if (result == null || result.IsNotFoundResult) { return NotFound(); } if (!result.IsSuccess) { return StatusCode((int)HttpStatusCode.InternalServerError); } return Ok(result); } [HttpGet] [ProducesResponseType(200)] public async Task List([FromQuery]PagedRequest request, string inc) { var result = await this.PlaylistService.List(roadieUser: await this.CurrentUserModel(), request: request); if (!result.IsSuccess) { return StatusCode((int)HttpStatusCode.InternalServerError); } return Ok(result); } [HttpPost("add")] [ProducesResponseType(200)] [ProducesResponseType(404)] public async Task AddNewPlaylist([FromBody]Playlist model) { var result = await this.PlaylistService.AddNewPlaylist(await this.CurrentUserModel(), model); if (!result.IsSuccess) { return StatusCode((int)HttpStatusCode.InternalServerError); } return Ok(result); } [HttpPost("delete/{id}")] [ProducesResponseType(200)] [ProducesResponseType(404)] public async Task DeletePlaylist(Guid id) { var result = await this.PlaylistService.DeletePlaylist(await this.CurrentUserModel(), id); if (result == null || result.IsNotFoundResult) { return NotFound(); } if(result != null && result.IsAccessDeniedResult) { return StatusCode((int)HttpStatusCode.Forbidden); } if (!result.IsSuccess) { return StatusCode((int)HttpStatusCode.InternalServerError); } return Ok(result); } } }