using Grpc.Core; using Microsoft.AspNetCore.Authorization; using Microsoft.eShopOnContainers.Services.Basket.API.Model; using Microsoft.Extensions.Logging; using System.Linq; using System.Threading.Tasks; using GrpcBasket; namespace GrpcBasket { public class BasketService : Basket.BasketBase { private readonly IBasketRepository _repository; private readonly ILogger _logger; public BasketService(IBasketRepository repository, ILogger logger) { _repository = repository; _logger = logger; } [AllowAnonymous] public override Task GetBasketById(BasketRequest request, ServerCallContext context) { _logger.LogInformation($"Begin grpc call from method {context.Method} for basket id {request.Id}"); //context.ResponseTrailers.Add("grpc-status", "0"); //context.Status = Status.DefaultSuccess; return Task.FromResult(new CustomerBasketResponse { Buyerid = "55" }); // if (!context.Response.SupportsTrailers()) // { // var headers = new HeaderDictionary(); // headers.Add("grpc-status", "0"); // Log.Logger.Information("Custom middleware headers {@headers}", headers); // context.Features.Set(new TestHttpResponseTrailersFeature // { // Trailers = headers // }); // } // return next(); // var data = await _repository.GetBasketAsync(request.Id); // if (data != null) // { // context.Status = new Status(StatusCode.OK, $"Basket with id {request.Id} do exist"); // return MapToCustomerBasketResponse(data); // } // else // { // context.Status = new Status(StatusCode.NotFound, $"Basket with id {request.Id} do not exist"); // } // return new CustomerBasketResponse(); } public override async Task UpdateBasket(CustomerBasketRequest request, ServerCallContext context) { _logger.LogInformation($"Begin grpc call BasketService.UpdateBasketAsync for buyer id {request.Buyerid}"); var customerBasket = MapToCustomerBasket(request); var response = await _repository.UpdateBasketAsync(customerBasket); if (response != null) { return MapToCustomerBasketResponse(response); } context.Status = new Status(StatusCode.NotFound, $"Basket with buyer id {request.Buyerid} do not exist"); return null; } private CustomerBasketResponse MapToCustomerBasketResponse(CustomerBasket customerBasket) { var response = new CustomerBasketResponse { Buyerid = customerBasket.BuyerId }; // 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; } private CustomerBasket MapToCustomerBasket(CustomerBasketRequest customerBasketRequest) { var response = new CustomerBasket { BuyerId = customerBasketRequest.Buyerid }; // customerBasketRequest.Items.ToList().ForEach(item => response.Items.Add(new BasketItem // { // 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; } } }