using System.ComponentModel.DataAnnotations; using Luticate2.Utils.Dbo.Basic; using Luticate2.Utils.Dbo.Filter; using Luticate2.Utils.Dbo.OrderBy; using Luticate2.Utils.Dbo.PaginatedRequest; using Luticate2.Utils.Interfaces; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; namespace Luticate2.Utils.Controllers { public abstract class LuCrudController : LuController where TDboCreate : class where TDboRead : class where TDboUpdate : class where TBusiness : ILuCrudInterface { protected readonly TBusiness Busines; protected LuCrudController(TBusiness busines, IOptions luUtilsOptionsDbo) : base(luUtilsOptionsDbo) { Busines = busines; } [HttpGet] [Route("[controller]/{id}")] public virtual LuApiWrapperDbo GetSingleById([Required]TId id) { return Handle(Busines.GetSingleById(id)); } [HttpGet] [Route("[controller]")] public virtual LuApiWrapperDbo> GetMultiple([Required]LuPaginatedRequestDbo request) { return Handle(Busines.GetMultiple(request.OrderBy, request.Filter, request.Page, request.PerPage)); } [HttpPost] [Route("[controller]")] public virtual LuApiWrapperDbo AddDbo([FromBody][Required]TDboCreate data) { return Handle(Busines.AddDbo(data)); } [HttpPost] [Route("[controller]/{id}")] public virtual LuApiWrapperDbo EditSingleByIdDbo([Required]TId id, [FromBody][Required]TDboUpdate data) { return Handle(Busines.EditSingleByIdDbo(id, data)); } [HttpDelete] [Route("[controller]/{id}")] public virtual LuApiWrapperDbo Delete([Required]TId id) { return Handle(Busines.DeleteSingleByIdDbo(id)); } } }