95 lines
2.9 KiB
C#
Raw Normal View History

2021-08-12 18:56:38 +05:30
namespace GrpcBasket;
2021-08-12 18:56:38 +05:30
public class BasketService : Basket.BasketBase
2019-08-19 09:24:58 +02:00
{
2021-08-12 18:56:38 +05:30
private readonly IBasketRepository _repository;
private readonly ILogger<BasketService> _logger;
public BasketService(IBasketRepository repository, ILogger<BasketService> logger)
{
_repository = repository;
_logger = logger;
}
[AllowAnonymous]
public override async Task<CustomerBasketResponse> GetBasketById(BasketRequest request, ServerCallContext context)
2019-08-19 09:24:58 +02:00
{
2021-08-12 18:56:38 +05:30
_logger.LogInformation("Begin grpc call from method {Method} for basket id {Id}", context.Method, request.Id);
var data = await _repository.GetBasketAsync(request.Id);
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
if (data != null)
2019-08-19 09:24:58 +02:00
{
2021-08-12 18:56:38 +05:30
context.Status = new Status(StatusCode.OK, $"Basket with id {request.Id} do exist");
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
return MapToCustomerBasketResponse(data);
}
else
2019-08-19 09:24:58 +02:00
{
2021-08-12 18:56:38 +05:30
context.Status = new Status(StatusCode.NotFound, $"Basket with id {request.Id} do not exist");
}
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
return new CustomerBasketResponse();
}
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
public override async Task<CustomerBasketResponse> UpdateBasket(CustomerBasketRequest request, ServerCallContext context)
{
_logger.LogInformation("Begin grpc call BasketService.UpdateBasketAsync for buyer id {Buyerid}", request.Buyerid);
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
var customerBasket = MapToCustomerBasket(request);
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
var response = await _repository.UpdateBasketAsync(customerBasket);
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
if (response != null)
2019-08-19 09:24:58 +02:00
{
2021-08-12 18:56:38 +05:30
return MapToCustomerBasketResponse(response);
}
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
context.Status = new Status(StatusCode.NotFound, $"Basket with buyer id {request.Buyerid} do not exist");
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
return null;
}
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
private CustomerBasketResponse MapToCustomerBasketResponse(CustomerBasket customerBasket)
{
var response = new CustomerBasketResponse
{
Buyerid = customerBasket.BuyerId
};
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
customerBasket.Items.ForEach(item => response.Items.Add(new BasketItemResponse
{
Id = item.Id,
Oldunitprice = (double)item.OldUnitPrice,
Pictureurl = item.PictureUrl,
Productid = item.ProductId,
Productname = item.ProductName,
Quantity = item.Quantity,
Unitprice = (double)item.UnitPrice
}));
return response;
}
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
private CustomerBasket MapToCustomerBasket(CustomerBasketRequest customerBasketRequest)
{
var response = new CustomerBasket
2019-08-19 09:24:58 +02:00
{
2021-08-12 18:56:38 +05:30
BuyerId = customerBasketRequest.Buyerid
};
2019-08-19 09:24:58 +02:00
2021-08-12 18:56:38 +05:30
customerBasketRequest.Items.ToList().ForEach(item => response.Items.Add(new BasketItem
2019-08-19 09:24:58 +02:00
{
2021-08-12 18:56:38 +05:30
Id = item.Id,
OldUnitPrice = (decimal)item.Oldunitprice,
PictureUrl = item.Pictureurl,
ProductId = item.Productid,
ProductName = item.Productname,
Quantity = item.Quantity,
UnitPrice = (decimal)item.Unitprice
}));
return response;
2019-08-19 09:24:58 +02:00
}
}