using Mapster; using Microsoft.AspNet.OData; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Roadie.Api.Services; using Roadie.Library.Caching; using Roadie.Library.Data; using Roadie.Library.Identity; using Roadie.Library.Models.Pagination; using System; using System.Linq; using System.Net; using System.Threading.Tasks; using models = Roadie.Library.Models; namespace Roadie.Api.Controllers { [Produces("application/json")] [Route("release")] [ApiController] [Authorize] public class ReleaseController : EntityControllerBase { private IReleaseService ReleaseService { get; } public ReleaseController(IReleaseService releaseService, ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration, UserManager userManager) : base(cacheManager, configuration, userManager) { this._logger = logger.CreateLogger("RoadieApi.Controllers.ReleaseController"); ; this.ReleaseService = releaseService; } //[EnableQuery] //public IActionResult Get() //{ // return Ok(this._RoadieDbContext.Releases.ProjectToType()); //} //[HttpGet("{id}")] //[ProducesResponseType(200)] //[ProducesResponseType(404)] //public IActionResult Get(Guid id) //{ // var key = id.ToString(); // var result = this._cacheManager.Get(key, () => // { // var d = this._RoadieDbContext // .Releases // .Include(x => x.Artist) // .Include(x => x.Labels).Include("Labels.Label") // .Include(x => x.Medias).Include("Medias.Tracks") // .Include(x => x.Genres).Include("Genres.Genre") // .Include(x => x.Collections).Include("Collections.Collection") // .FirstOrDefault(x => x.RoadieId == id); // if (d != null) // { // return d.Adapt(); // } // return null; // }, key); // if (result == null) // { // return NotFound(); // } // return Ok(result); //} [HttpPost] [ProducesResponseType(200)] public async Task List(PagedRequest request, string inc) { var result = await this.ReleaseService.ReleaseList(user: await this.CurrentUserModel(), request: request, includes: (inc ?? models.Releases.Release.DefaultIncludes).ToLower().Split(",")); if (!result.IsSuccess) { return StatusCode((int)HttpStatusCode.InternalServerError); } return Ok(result); } [HttpPost("random")] [ProducesResponseType(200)] public async Task RandomList(PagedRequest request, string inc) { var result = await this.ReleaseService.ReleaseList(user: await this.CurrentUserModel(), request: request, doRandomize: true, includes: (inc ?? models.Releases.Release.DefaultIncludes).ToLower().Split(",")); if (!result.IsSuccess) { return StatusCode((int)HttpStatusCode.InternalServerError); } return Ok(result); } } }