diff --git a/Business/Abstract/IProductService.cs b/Business/Abstract/IProductService.cs index f0b7826..6e74c19 100644 --- a/Business/Abstract/IProductService.cs +++ b/Business/Abstract/IProductService.cs @@ -6,14 +6,11 @@ namespace Business.Abstract { - public interface IProductService + public interface IProductService : IServiceBase { IDataResult GetById(int productId); IDataResult> GetList(); IDataResult> GetListByCategory(int categoryId); - IResult Add(Product product); - IResult Delete(Product product); - IResult Update(Product product); IResult TransactionalOperation(Product product); diff --git a/Business/Abstract/IServiceBase.cs b/Business/Abstract/IServiceBase.cs new file mode 100644 index 0000000..1150205 --- /dev/null +++ b/Business/Abstract/IServiceBase.cs @@ -0,0 +1,12 @@ +using Core.Utilities.Results; +using System.Collections.Generic; + +namespace Business.Abstract +{ + public interface IServiceBase + { + IResult Add(T entity); + IResult Update(T entity); + IResult Delete(T entity); + } +} diff --git a/WebAPI/Controllers/GenericBaseController.cs b/WebAPI/Controllers/GenericBaseController.cs new file mode 100644 index 0000000..2647d8b --- /dev/null +++ b/WebAPI/Controllers/GenericBaseController.cs @@ -0,0 +1,37 @@ +using Business.Abstract; +using Core.Entities; +using Core.Utilities.Results; +using Microsoft.AspNetCore.Mvc; + +namespace WebAPI.Controllers +{ + //This class is base for CRUD operations. + //Thanks to this class, CRUD operations can be performed for each controller without code repetition. + public class GenericBaseController : ControllerBase + where TService : IServiceBase + where T : class, IEntity, new() + { + protected TService _service; + + public GenericBaseController(TService tService) => this._service = tService; + + [HttpPost("add")] + public virtual IActionResult Add(T entity) => GetResponseByResultSuccess(_service.Add(entity)); + + [HttpPost("update")] + public virtual IActionResult Update(T entity) => GetResponseByResultSuccess(_service.Update(entity)); + + [HttpPost("delete")] + public virtual IActionResult Delete(T entity) => GetResponseByResultSuccess(_service.Delete(entity)); + + protected IActionResult GetResponseByResultSuccess(IResult result) + { + if (result.Success) + { + return Ok(result); + } + + return BadRequest(result); + } + } +} diff --git a/WebAPI/Controllers/ProductsController.cs b/WebAPI/Controllers/ProductsController.cs index 302c134..3b83883 100644 --- a/WebAPI/Controllers/ProductsController.cs +++ b/WebAPI/Controllers/ProductsController.cs @@ -13,99 +13,35 @@ namespace WebAPI.Controllers { [Route("api/[controller]")] [ApiController] - public class ProductsController : ControllerBase + public class ProductsController : GenericBaseController { - private IProductService _productService; - - public ProductsController(IProductService productService) + public ProductsController(IProductService productService) : base(productService) { - _productService = productService; } [HttpGet("getall")] //[Authorize(Roles = "Product.List")] public IActionResult GetList() { - - var result = _productService.GetList(); - if (result.Success) - { - return Ok(result.Data); - } - - return BadRequest(result.Message); + return base.GetResponseByResultSuccess(base._service.GetList()); } [HttpGet("getlistbycategory")] public IActionResult GetListByCategory(int categoryId) { - var result = _productService.GetListByCategory(categoryId); - if (result.Success) - { - return Ok(result.Data); - } - - return BadRequest(result.Message); + return base.GetResponseByResultSuccess(base._service.GetListByCategory(categoryId)); } [HttpGet("getbyid")] public IActionResult GetById(int productId) { - var result = _productService.GetById(productId); - if (result.Success) - { - return Ok(result.Data); - } - - return BadRequest(result.Message); - } - - [HttpPost("add")] - public IActionResult Add(Product product) - { - var result = _productService.Add(product); - if (result.Success) - { - return Ok(result.Message); - } - - return BadRequest(result.Message); - } - - [HttpPost("update")] - public IActionResult Update(Product product) - { - var result = _productService.Update(product); - if (result.Success) - { - return Ok(result.Message); - } - - return BadRequest(result.Message); - } - - [HttpPost("delete")] - public IActionResult Delete(Product product) - { - var result = _productService.Delete(product); - if (result.Success) - { - return Ok(result.Message); - } - - return BadRequest(result.Message); + return base.GetResponseByResultSuccess(base._service.GetById(productId)); } [HttpPost("transaction")] public IActionResult TransactionTest(Product product) { - var result = _productService.TransactionalOperation(product); - if (result.Success) - { - return Ok(result.Message); - } - - return BadRequest(result.Message); + return base.GetResponseByResultSuccess(base._service.TransactionalOperation(product)); } }