112 lines
2.6 KiB
C#
Raw Normal View History

2023-04-25 08:27:59 +04:00
using Microsoft.AspNetCore.Mvc;
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarContracts.SearchModels;
using SushiBarContracts.ViewModels;
namespace SushiBarRestApi.Controllers;
[Route("api/[controller]/[action]")]
[ApiController]
public class StoreController : Controller
{
private readonly ILogger _logger;
private readonly IStoreLogic _store;
public StoreController(ILogger<MainController> logger,
IStoreLogic store)
{
_logger = logger;
_store = store;
}
[HttpGet]
public List<StoreViewModel>? GetStores()
{
try
{
return _store.ReadList(null);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error getting store list");
throw;
}
}
[HttpGet]
public Tuple<StoreViewModel, List<Tuple<string, int>>>? GetStore(int storeId)
{
try
{
var elem = _store.ReadElement(new StoreSearchModel { Id = storeId });
return elem == null ?
null :
Tuple.Create(elem, elem.Sushis
.Select(x => Tuple.Create(x.Value.Item1.SushiName, x.Value.Item2))
.ToList());
}
catch (Exception ex)
{
_logger.LogError(ex, "Error getting store with id={Id}", storeId);
throw;
}
}
[HttpPost]
public void CreateStore(StoreBindingModel model)
{
try
{
_store.Create(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error create store");
throw;
}
}
[HttpPost]
public void UpdateData(StoreBindingModel model)
{
try
{
model.Sushis = null!;
_store.Update(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Data update error");
throw;
}
}
[HttpPost]
public void DeleteStore(StoreBindingModel model)
{
try
{
_store.Delete(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Store deletion error");
throw;
}
}
[HttpPost]
public void Supply(Tuple<StoreSearchModel, SushiViewModel, int> model)
{
try
{
_store.SupplySushi(model.Item1, model.Item2, model.Item3);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error adding product to store");
throw;
}
}
}