Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions Business/Abstract/IProductService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,11 @@

namespace Business.Abstract
{
public interface IProductService
public interface IProductService : IServiceBase<Product>
{
IDataResult<Product> GetById(int productId);
IDataResult<List<Product>> GetList();
IDataResult<List<Product>> GetListByCategory(int categoryId);
IResult Add(Product product);
IResult Delete(Product product);
IResult Update(Product product);

IResult TransactionalOperation(Product product);

Expand Down
12 changes: 12 additions & 0 deletions Business/Abstract/IServiceBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Core.Utilities.Results;
using System.Collections.Generic;

namespace Business.Abstract
{
public interface IServiceBase<T>
{
IResult Add(T entity);
IResult Update(T entity);
IResult Delete(T entity);
}
}
37 changes: 37 additions & 0 deletions WebAPI/Controllers/GenericBaseController.cs
Original file line number Diff line number Diff line change
@@ -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<T, TService> : ControllerBase
where TService : IServiceBase<T>
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);
}
}
}
76 changes: 6 additions & 70 deletions WebAPI/Controllers/ProductsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,99 +13,35 @@ namespace WebAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
public class ProductsController : GenericBaseController<Product, IProductService>
{
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));
}

}
Expand Down