using Church.Net.Entity; using Church.Net.Entity.Interface; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Threading.Tasks; using WebAPI.Logics.Interface; namespace WebAPI.Controllers { [Authorize] public class ApiControllerBase : ControllerBase where T : IEntity { protected readonly ICrudLogic logic; public ApiControllerBase(ICrudLogic logic) { this.logic = logic; } [HttpGet] public virtual async Task> GetAll() { return await Task.Run(() => { return logic.GetAll(); }); } [HttpGet] public virtual async Task GetById(string id) { return await Task.Run(() => { return logic.GetById(id); }); } [HttpPost] public virtual async Task Update(T entity) { return await Task.Run(() => { return logic.Update(entity); }); } [HttpPost] public virtual async Task CreateOrUpdate([FromBody] T entity) { return await Task.Run(() => { logic.CreateOrUpdate(entity, out string id); return id; }); } [HttpPost] public virtual async Task> CreateOrUpdateAll([FromBody] IEnumerable entitys) { return await Task.Run(() => { foreach (var item in entitys) { logic.CreateOrUpdate(item, out string id); } return entitys; }); } [HttpDelete("{id}")] public virtual async Task Delete(string id) { return await Task.Run(() => { var entity = logic.GetById(id); if (entity != null) { logic.Delete(entity); } return entity; }); } } [Authorize] public class CombinedKeyApiControllerBase : ControllerBase where T : ICombinedKeyEntity { protected readonly ICombinedKeyCrudLogic logic; public CombinedKeyApiControllerBase(ICombinedKeyCrudLogic logic) { this.logic = logic; } [HttpGet] public virtual async Task> GetAll() { return await Task.Run(() => { return logic.GetAll(); }); } [HttpGet] public virtual async Task GetById(string[] ids) { return await Task.Run(() => { return logic.GetById(ids); }); } [HttpPost] public virtual async Task Update(T entity) { return await Task.Run(() => { return logic.Update(entity); }); } [HttpPost] public virtual async Task CreateOrUpdate([FromBody] T entity) { return await Task.Run(() => { return logic.CreateOrUpdate(entity); }); } [HttpPost] public virtual async Task> CreateOrUpdateAll([FromBody] IEnumerable entitys) { return await Task.Run(() => { foreach (var item in entitys) { logic.CreateOrUpdate(item); } return entitys; }); } [HttpDelete] public virtual async Task Delete(string[] ids) { return await Task.Run(() => { var entity = logic.GetById(ids); if (entity != null) { logic.Delete(entity); } return entity; }); } } }