This commit is contained in:
Steven Hildreth 2018-11-11 14:45:44 -06:00
parent b0d523215e
commit c3656625ae
12 changed files with 126 additions and 28 deletions

View file

@ -21,14 +21,11 @@ namespace Roadie.Api.Controllers
{
private IArtistService ArtistService { get; }
private UserManager<ApplicationUser> UserManager { get; }
public ArtistController(IArtistService artistService, ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration, UserManager<ApplicationUser> userManager)
: base(cacheManager, configuration)
: base(cacheManager, configuration, userManager)
{
this._logger = logger.CreateLogger("RoadieApi.Controllers.ArtistController");
this.ArtistService = artistService;
this.UserManager = userManager;
}
//[EnableQuery]
@ -43,7 +40,7 @@ namespace Roadie.Api.Controllers
public async Task<ActionResult<Artist>> Get(Guid id, string inc = null)
{
var result = await this.ArtistService.ArtistById(null, id, (inc ?? Artist.DefaultIncludes).ToLower().Split(","));
if (result == null)
if (result == null || result.IsNotFoundResult)
{
return NotFound();
}

View file

@ -1,31 +1,51 @@
using Mapster;
using Microsoft.AspNet.OData;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Roadie.Library.Caching;
using Roadie.Library.Configuration;
using Roadie.Library.Data;
using Roadie.Library.Identity;
using models = Roadie.Library.Models.Users;
using System.Threading.Tasks;
namespace Roadie.Api.Controllers
{
public abstract class EntityControllerBase : ODataController
{
protected readonly ICacheManager _cacheManager;
protected readonly IConfiguration _configuration;
protected readonly IRoadieSettings _roadieSettings;
protected ICacheManager CacheManager { get; }
protected IConfiguration Configuration { get; }
protected IRoadieSettings RoadieSettings { get; }
protected UserManager<ApplicationUser> UserManager { get; }
protected ILogger _logger;
protected IRoadieSettings RoadieSettings => this._roadieSettings;
public EntityControllerBase(ICacheManager cacheManager, IConfiguration configuration)
public EntityControllerBase(ICacheManager cacheManager, IConfiguration configuration, UserManager<ApplicationUser> userManager)
{
this._cacheManager = cacheManager;
this._configuration = configuration;
this.CacheManager = cacheManager;
this.Configuration = configuration;
this._roadieSettings = new RoadieSettings();
this._configuration.GetSection("RoadieSettings").Bind(this._roadieSettings);
this.RoadieSettings = new RoadieSettings();
this.Configuration.GetSection("RoadieSettings").Bind(this.RoadieSettings);
this.UserManager = userManager;
}
private models.User _currentUser = null;
protected async Task<models.User> CurrentUserModel()
{
if(this._currentUser == null)
{
if(this.User.Identity.IsAuthenticated)
{
var user = await this.UserManager.GetUserAsync(User);
this._currentUser = user.Adapt<models.User>();
this._currentUser.IsAdmin = User.IsInRole("Admin");
this._currentUser.IsEditor = User.IsInRole("Editor");
}
}
return this._currentUser;
}
}
}

View file

@ -1,9 +1,11 @@
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 System;
using System.Net;
using System.Threading.Tasks;
@ -18,8 +20,8 @@ namespace Roadie.Api.Controllers
{
private IImageService ImageService { get; }
public ImageController(IImageService imageService, ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration)
: base(cacheManager, configuration)
public ImageController(IImageService imageService, ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration, UserManager<ApplicationUser> userManager)
: base(cacheManager, configuration, userManager)
{
this._logger = logger.CreateLogger("RoadieApi.Controllers.ImageController");
this.ImageService = imageService;
@ -198,5 +200,21 @@ namespace Roadie.Api.Controllers
lastModified: result.LastModified,
entityTag: result.ETag);
}
[HttpPost("{id}")]
[Authorize(Policy ="Editor")]
public async Task<IActionResult> Delete(Guid id)
{
var result = await this.ImageService.Delete(await this.CurrentUserModel(), id);
if (result == null || result.IsNotFoundResult)
{
return NotFound();
}
if (!result.IsSuccess)
{
return StatusCode((int)HttpStatusCode.InternalServerError);
}
return Ok(result);
}
}
}

View file

@ -1,11 +1,13 @@
using Mapster;
using Microsoft.AspNet.OData;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Roadie.Library.Caching;
using Roadie.Library.Data;
using Roadie.Library.Identity;
using System;
using System.Linq;
using models = Roadie.Library.Models;
@ -18,8 +20,8 @@ namespace Roadie.Api.Controllers
[Authorize]
public class LabelController : EntityControllerBase
{
public LabelController(ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration)
: base( cacheManager, configuration)
public LabelController(ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration, UserManager<ApplicationUser> userManager)
: base( cacheManager, configuration, userManager)
{
this._logger = logger.CreateLogger("RoadieApi.Controllers.LabelController"); ;
}

View file

@ -1,12 +1,14 @@
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.Library.Caching;
using Roadie.Library.Data;
using Roadie.Library.Identity;
using System;
using System.Linq;
using models = Roadie.Library.Models;
@ -19,8 +21,8 @@ namespace Roadie.Api.Controllers
[Authorize]
public class ReleaseController : EntityControllerBase
{
public ReleaseController(ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration)
: base(cacheManager, configuration)
public ReleaseController(ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration, UserManager<ApplicationUser> userManager)
: base(cacheManager, configuration, userManager)
{
this._logger = logger.CreateLogger("RoadieApi.Controllers.ReleaseController"); ;
}

View file

@ -1,11 +1,13 @@
using Mapster;
using Microsoft.AspNet.OData;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Roadie.Library.Caching;
using Roadie.Library.Data;
using Roadie.Library.Identity;
using System;
using System.Linq;
using models = Roadie.Library.Models;
@ -18,8 +20,8 @@ namespace Roadie.Api.Controllers
[Authorize]
public class TrackController : EntityControllerBase
{
public TrackController(ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration)
: base(cacheManager, configuration)
public TrackController(ILoggerFactory logger, ICacheManager cacheManager, IConfiguration configuration, UserManager<ApplicationUser> userManager)
: base(cacheManager, configuration, userManager)
{
this._logger = logger.CreateLogger("RoadieApi.Controllers.TrackController"); ;
}

View file

@ -76,11 +76,7 @@ namespace Roadie.Api.Services
if (artist == null)
{
sw.Stop();
return new OperationResult<Artist>(string.Format("Artist Not Found [{0}]", id))
{
OperationTime = sw.ElapsedMilliseconds
};
return new OperationResult<Artist>(true, string.Format("Artist Not Found [{0}]", id));
}
var result = artist.Adapt<Artist>();
result.Thumbnail = base.MakeArtistThumbnailImage(id);

View file

@ -1,5 +1,6 @@
using Microsoft.Net.Http.Headers;
using Roadie.Library;
using Roadie.Library.Models.Users;
using System;
using System.Threading.Tasks;
@ -11,6 +12,8 @@ namespace Roadie.Api.Services
Task<FileOperationResult<Library.Models.Image>> CollectionThumbnail(Guid id, int? width, int? height, EntityTagHeaderValue etag = null);
Task<OperationResult<bool>> Delete(User roadieUser, Guid id);
Task<FileOperationResult<Library.Models.Image>> ImageById(Guid id, int? width, int? height, EntityTagHeaderValue etag = null);
Task<FileOperationResult<Library.Models.Image>> LabelThumbnail(Guid id, int? width, int? height, EntityTagHeaderValue etag = null);

View file

@ -9,6 +9,7 @@ using Roadie.Library.Encoding;
using Roadie.Library.Identity;
using Roadie.Library.Imaging;
using Roadie.Library.Models;
using Roadie.Library.Models.Users;
using Roadie.Library.Utility;
using System;
using System.Diagnostics;
@ -418,5 +419,37 @@ namespace Roadie.Api.Services
}
return new FileOperationResult<Image>(OperationMessages.ErrorOccured);
}
public async Task<OperationResult<bool>> Delete(User roadieUser, Guid id)
{
var sw = Stopwatch.StartNew();
var image = this.DbContext.Images
.Include("Release")
.Include("Artist")
.FirstOrDefault(x => x.RoadieId == id);
if (image == null)
{
return new OperationResult<bool>(true, string.Format("Image Not Found [{0}]", id));
}
if(image.ArtistId.HasValue)
{
this.CacheManager.ClearRegion(data.Artist.CacheRegionUrn(image.Artist.RoadieId));
}
if(image.ReleaseId.HasValue)
{
this.CacheManager.ClearRegion(data.Release.CacheRegionUrn(image.Release.RoadieId));
}
this.DbContext.Images.Remove(image);
await this.DbContext.SaveChangesAsync();
this.CacheManager.ClearRegion(data.Image.CacheRegionUrn(id));
this.Logger.LogInformation($"Deleted Image [{ id }], By User [{ roadieUser.ToString() }]");
sw.Stop();
return new OperationResult<bool>
{
Data = true,
IsSuccess = true,
OperationTime = sw.ElapsedMilliseconds
};
}
}
}

View file

@ -41,6 +41,11 @@ namespace Roadie.Library
public FileOperationResult(bool isNotFoundResult, IEnumerable<string> messages = null)
{
this.IsNotFoundResult = isNotFoundResult;
if (messages != null && messages.Any())
{
this.AdditionalData = new Dictionary<string, object>();
messages.ToList().ForEach(x => this.AddMessage(x));
}
}
}
}

View file

@ -13,5 +13,9 @@ namespace Roadie.Library.Models.Users
public Guid UserId { get; set; }
public int Id { get; set; }
public override string ToString()
{
return $"Id [{ Id }], RoadieId [{ UserId }], UserName [{ UserName }]";
}
}
}

View file

@ -38,6 +38,22 @@ namespace Roadie.Library
}
}
public OperationResult(bool isNotFoundResult, IEnumerable<string> messages = null)
{
this.IsNotFoundResult = isNotFoundResult;
if (messages != null && messages.Any())
{
this.AdditionalData = new Dictionary<string, object>();
messages.ToList().ForEach(x => this.AddMessage(x));
}
}
public OperationResult(bool isNotFoundResult, string message)
{
this.IsNotFoundResult = isNotFoundResult;
this.AddMessage(message);
}
public OperationResult(string message = null)
{
this.AdditionalData = new Dictionary<string, object>();