using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Threading.Tasks; using zero.Core; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Identity; using zero.Web.Filters; using zero.Web.Mapper; using zero.Web.Models; namespace zero.Web.Controllers { [ZeroAuthorize, CanEdit, AddToken] public abstract class BackofficeController : Controller { protected IZeroConfiguration Configuration { get; set; } protected IMapper Mapper { get; set; } protected IToken Token { get; set; } public BackofficeController(IZeroConfiguration config, IMapper mapper, IToken token) { Configuration = config; Mapper = mapper; Token = token; } public BackofficeController(IZeroConfiguration config) { Configuration = config; } protected async Task As(T model) where TTarget : class, new() where T : IZeroEntity { if (model == null) { return new StatusCodeResult(404); } if (Mapper == null) { // TODO show error with help on how to inject mapper in constructor + base constructor } TTarget result = await Mapper.Map(model); if (result is EditModel) { EditModel editModel = result as EditModel; //model.CanEdit = } return Json(result); } protected async Task As(IEnumerable model) where TTarget : class, new() where T : IZeroEntity { if (model == null) { return new StatusCodeResult(404); } return Json(await Mapper.Map(model)); } protected async Task As(ListResult model) where TTarget : class, new() where T : IZeroEntity { if (model == null) { return new StatusCodeResult(404); } return Json(await Mapper.Map(model)); } protected async Task As(EntityResult model) where TTarget : class, new() where T : IZeroEntity { if (model == null) { return new StatusCodeResult(404); } return Json(await Mapper.Map(model)); } protected async Task Map(T model) where TTarget : class, new() { return await Mapper.Map(model); } } }