Files
GenericStuff/CodeReviewApp/Controllers/ProductController.cs
2024-07-14 19:45:34 +07:00

129 lines
3.7 KiB
C#

using AutoMapper;
using CodeReviewApp.ConfiguringManager;
using CodeReviewApp.Models;
using DAL.Repositories;
using Domain.Models;
using Microsoft.AspNetCore.Mvc;
namespace CodeReviewApp.Controllers;
public class ProductController: ControllerBase
{
private readonly IProductRepository _productRepository;
private readonly ILogger<ProductController> _logger;
private readonly IMapper _mapper;
public ProductController(IProductRepository productRepository, ILogger<ProductController> logger, IMapper mapper)
{
_productRepository = productRepository;
_logger = logger;
_mapper = mapper;
}
[HttpGet]
public async Task<IActionResult> GetAll()
{
_logger.LogInformation($"Api method {Request.Path.Value} was started");
var cts = new CancellationTokenSource();
var token = cts.Token;
return Ok(await _productRepository.GetAll(
Configurations.Redis.CacheLifeTime, token));
}
[HttpPost("add")]
public async Task<IActionResult> Add([FromBody] ProductRequest productRequest)
{
_logger.LogInformation($"Api method {Request.Path.Value} was started");
if (!ModelState.IsValid)
{
_logger.LogWarning($"Api method {Request.Path.Value}, {ModelState}");
return BadRequest(ModelState);
}
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(Configurations.Database.TimeOut));
var token = cts.Token;
var entity = _mapper.Map<Product>(productRequest);
try
{
await _productRepository.Create(entity,
Configurations.Redis.CacheLifeTime, token);
}
catch (Exception ex)
{
_logger.LogError(ex, ex.Message);
return StatusCode(500);
}
return Ok();
}
[HttpGet("{id:int}")]
public async Task<IActionResult> GetById(int id)
{
_logger.LogInformation($"Api method {Request.Path.Value} was started");
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(Configurations.Database.TimeOut));
var token = cts.Token;
return Ok(await _productRepository.Get(id, Configurations.Redis.CacheLifeTime, token));
}
[HttpPost("delete/{id:int}")]
public async Task<IActionResult> Delete(int id)
{
_logger.LogInformation($"Api method {Request.Path.Value} was started");
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(Configurations.Database.TimeOut));
var token = cts.Token;
try
{
await _productRepository.Delete(id, token);
}
catch (Exception ex)
{
_logger.LogError(ex, ex.Message);
return StatusCode(500);
}
return Ok();
}
[HttpPost("update")]
public async Task<IActionResult> Update([FromBody] Product productRequest)
{
_logger.LogInformation($"Api method {Request.Path.Value} was started");
if (!ModelState.IsValid)
{
_logger.LogWarning($"Api method {Request.Path.Value}, {ModelState}");
return BadRequest(ModelState);
}
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(Configurations.Database.TimeOut));
var token = cts.Token;
try
{
await _productRepository.Update(productRequest,
Configurations.Redis.CacheLifeTime, token);
}
catch (Exception ex)
{
_logger.LogError(ex, ex.Message);
return StatusCode(500);
}
return Ok();
}
}