mirror of
https://github.com/sphildreth/roadie
synced 2024-09-20 06:32:02 +00:00
WIP
This commit is contained in:
parent
b0d523215e
commit
c3656625ae
12 changed files with 126 additions and 28 deletions
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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"); ;
|
||||
}
|
||||
|
|
|
@ -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"); ;
|
||||
}
|
||||
|
|
|
@ -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"); ;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 }]";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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>();
|
||||
|
|
Loading…
Reference in a new issue