public static async Task <IDictionary <string, ExpProduct> > LoadProductsAsync(IMediator mediator, IResolveFieldContext context, IEnumerable <string> ids, string[] includeFields) { var request = new LoadProductsQuery { ObjectIds = ids.ToArray(), StoreId = context.GetValue <string>("storeId"), IncludeFields = includeFields.ToArray() }; var response = await mediator.Send(request); return(response.Products.ToDictionary(x => x.Id)); }
public OrderLineItemType(IMediator mediator, IDataLoaderContextAccessor dataLoader, IDynamicPropertyResolverService dynamicPropertyResolverService) { Field(x => x.Id); Field(x => x.ProductType, true); Field(x => x.Name); Field(x => x.Comment, true); Field(x => x.ImageUrl, true); Field(x => x.IsGift, true); Field(x => x.ShippingMethodCode, true); Field(x => x.FulfillmentLocationCode, true); Field(x => x.FulfillmentCenterId, true); Field(x => x.FulfillmentCenterName, true); Field(x => x.OuterId, true); Field(x => x.WeightUnit, true); Field(x => x.Weight, true); Field(x => x.MeasureUnit, true); Field(x => x.Height, true); Field(x => x.Length, true); Field(x => x.Width, true); Field(x => x.IsCancelled); Field(x => x.CancelledDate, true); Field(x => x.CancelReason, true); Field(x => x.ObjectType); Field(x => x.CategoryId, true); Field(x => x.CatalogId); Field(x => x.Sku); Field(x => x.PriceId, true); Field <MoneyType>(nameof(LineItem.Price).ToCamelCase(), resolve: context => new Money(context.Source.Price, context.GetOrderCurrency())); Field <MoneyType>(nameof(LineItem.PriceWithTax).ToCamelCase(), resolve: context => new Money(context.Source.PriceWithTax, context.GetOrderCurrency())); Field(x => x.TaxType, true); Field(x => x.TaxPercentRate); Field(x => x.ReserveQuantity); Field(x => x.Quantity); Field(x => x.ProductId); Field <CurrencyType>(nameof(LineItem.Currency).ToCamelCase(), resolve: context => context.GetOrderCurrency()); Field <MoneyType>(nameof(LineItem.DiscountAmount).ToCamelCase(), resolve: context => new Money(context.Source.DiscountAmount, context.GetOrderCurrency())); Field <MoneyType>(nameof(LineItem.DiscountAmountWithTax).ToCamelCase(), resolve: context => new Money(context.Source.DiscountAmountWithTax, context.GetOrderCurrency())); Field <MoneyType>(nameof(LineItem.DiscountTotal).ToCamelCase(), resolve: context => new Money(context.Source.DiscountTotal, context.GetOrderCurrency())); Field <MoneyType>(nameof(LineItem.DiscountTotalWithTax).ToCamelCase(), resolve: context => new Money(context.Source.DiscountTotalWithTax, context.GetOrderCurrency())); Field <MoneyType>(nameof(LineItem.ExtendedPrice).ToCamelCase(), resolve: context => new Money(context.Source.ExtendedPrice, context.GetOrderCurrency())); Field <MoneyType>(nameof(LineItem.ExtendedPriceWithTax).ToCamelCase(), resolve: context => new Money(context.Source.ExtendedPriceWithTax, context.GetOrderCurrency())); Field <MoneyType>(nameof(LineItem.PlacedPrice).ToCamelCase(), resolve: context => new Money(context.Source.PlacedPrice, context.GetOrderCurrency())); Field <MoneyType>(nameof(LineItem.PlacedPriceWithTax).ToCamelCase(), resolve: context => new Money(context.Source.PlacedPriceWithTax, context.GetOrderCurrency())); Field <MoneyType>(nameof(LineItem.TaxTotal).ToCamelCase(), resolve: context => new Money(context.Source.TaxTotal, context.GetOrderCurrency())); Field <NonNullGraphType <ListGraphType <OrderTaxDetailType> > >(nameof(LineItem.TaxDetails), resolve: x => x.Source.TaxDetails); Field <NonNullGraphType <ListGraphType <OrderDiscountType> > >(nameof(LineItem.Discounts), resolve: x => x.Source.Discounts); var productField = new FieldType { Name = "product", Type = GraphTypeExtenstionHelper.GetActualType <ProductType>(), Resolver = new FuncFieldResolver <LineItem, IDataLoaderResult <ExpProduct> >(context => { var includeFields = context.SubFields.Values.GetAllNodesPaths(); var loader = dataLoader.Context.GetOrAddBatchLoader <string, ExpProduct>("order_lineItems_products", async(ids) => { //Get currencies and store only from one order. //We intentionally ignore the case when there are ma be the orders with the different currencies and stores in the resulting set var order = context.GetValueForSource <CustomerOrderAggregate>().Order; var request = new LoadProductsQuery { StoreId = order.StoreId, CurrencyCode = order.Currency, ObjectIds = ids.ToArray(), IncludeFields = includeFields.ToArray() }; if (!context.UserContext.ContainsKey("storeId")) { context.UserContext.Add("storeId", order.StoreId); } var response = await mediator.Send(request); return(response.Products.ToDictionary(x => x.Id)); }); return(loader.LoadAsync(context.Source.ProductId)); }) }; AddField(productField); ExtendableField <ListGraphType <DynamicPropertyValueType> >( "dynamicProperties", "Customer order Line item dynamic property values", QueryArgumentPresets.GetArgumentForDynamicProperties(), context => dynamicPropertyResolverService.LoadDynamicPropertyValues(context.Source, context.GetArgumentOrValue <string>("cultureName"))); }
public LineItemType(IMediator mediator, IDataLoaderContextAccessor dataLoader) { var productField = new FieldType { Name = "product", Type = GraphTypeExtenstionHelper.GetActualType <ProductType>(), Resolver = new FuncFieldResolver <LineItem, IDataLoaderResult <ExpProduct> >(context => { var includeFields = context.SubFields.Values.GetAllNodesPaths(); var loader = dataLoader.Context.GetOrAddBatchLoader <string, ExpProduct>("order_lineItems_products", async(ids) => { //Get currencies and store only from one cart. //We intentionally ignore the case when there are ma be the carts with the different currencies and stores in the resulting set var cart = context.GetValueForSource <CartAggregate>().Cart; var request = new LoadProductsQuery { StoreId = cart.StoreId, CurrencyCode = cart.Currency, ObjectIds = ids.ToArray(), IncludeFields = includeFields.ToArray() }; var response = await mediator.Send(request); return(response.Products.ToDictionary(x => x.Id)); }); return(loader.LoadAsync(context.Source.ProductId)); }) }; AddField(productField); //Field<MoneyType>("paymentPlan", resolve: context => context.Source.PaymentPlan); Field <IntGraphType>("inStockQuantity", resolve: context => context.GetCart().CartProducts[context.Source.ProductId]?.AvailableQuantity ?? 0); Field <StringGraphType>("warehouseLocation", resolve: context => context.GetCart().CartProducts[context.Source.ProductId]?.Inventory?.FulfillmentCenter?.Address); Field <BooleanGraphType>("IsValid", resolve: context => !context.GetCart().ValidationErrors.GetEntityCartErrors(context.Source).Any()); Field <ListGraphType <ValidationErrorType> >("validationErrors", resolve: context => context.GetCart().ValidationErrors.GetEntityCartErrors(context.Source)); Field(x => x.CatalogId, nullable: true).Description("Value of catalog id"); Field(x => x.CategoryId, nullable: true).Description("Value of category id"); Field(x => x.CreatedDate, nullable: true).Description("Line item created date"); Field(x => x.Height, nullable: true).Description("Value of height"); Field(x => x.Id, nullable: false).Description("Line item id"); Field(x => x.ImageUrl, nullable: true).Description("Value of line item image absolute URL"); Field(x => x.IsGift, nullable: true).Description("flag of line item is a gift"); Field(x => x.IsReadOnly, nullable: true).Description("Is readOnly"); Field(x => x.IsReccuring, nullable: true).Description("flag of line item is recurring"); Field(x => x.LanguageCode, nullable: true).Description("Culture name in ISO 3166-1 alpha-3 format"); Field(x => x.Length, nullable: true).Description("Value of length"); Field(x => x.MeasureUnit, nullable: true).Description("Value of measurement unit"); Field(x => x.Name, nullable: true).Description("Value of line item name"); Field(x => x.Note, nullable: true).Description("Value of line item comment"); Field(x => x.ObjectType, nullable: true).Description("Value of line item quantity"); Field(x => x.ProductId, nullable: true).Description("Value of product id"); Field(x => x.ProductType, nullable: true).Description("type of product (can be Physical, Digital or Subscription)"); Field(x => x.Quantity, nullable: true).Description("Value of line item quantity"); Field(x => x.RequiredShipping, nullable: true).Description("requirement for line item shipping"); Field(x => x.ShipmentMethodCode, nullable: true).Description("Value of line item shipping method code"); Field(x => x.Sku, nullable: true).Description("Value of product SKU"); Field(x => x.TaxPercentRate, nullable: true).Description("Value of total shipping tax amount"); Field(x => x.TaxType, nullable: true).Description("Value of shipping tax type"); Field(x => x.ThumbnailImageUrl, nullable: true).Description("Value of line item thumbnail image absolute URL"); Field(x => x.VolumetricWeight, nullable: true).Description("Value of volumetric weight"); Field(x => x.Weight, nullable: true).Description("Value of shopping cart weight"); Field(x => x.WeightUnit, nullable: true).Description("Value of weight unit"); Field(x => x.Width, nullable: true).Description("Value of width"); Field <ListGraphType <DiscountType> >("discounts", resolve: context => context.Source.Discounts); Field <ListGraphType <TaxDetailType> >("taxDetails", resolve: context => context.Source.TaxDetails); Field <MoneyType>("discountAmount", resolve: context => context.Source.DiscountAmount.ToMoney(context.GetCart().Currency)); Field <MoneyType>("discountAmountWithTax", resolve: context => context.Source.DiscountAmountWithTax.ToMoney(context.GetCart().Currency)); Field <MoneyType>("discountTotal", resolve: context => context.Source.DiscountTotal.ToMoney(context.GetCart().Currency)); Field <MoneyType>("discountTotalWithTax", resolve: context => context.Source.DiscountTotalWithTax.ToMoney(context.GetCart().Currency)); Field <MoneyType>("extendedPrice", resolve: context => context.Source.ExtendedPrice.ToMoney(context.GetCart().Currency)); Field <MoneyType>("extendedPriceWithTax", resolve: context => context.Source.ExtendedPriceWithTax.ToMoney(context.GetCart().Currency)); Field <MoneyType>("listPrice", resolve: context => context.Source.ListPrice.ToMoney(context.GetCart().Currency)); Field <MoneyType>("listPriceWithTax", resolve: context => context.Source.ListPriceWithTax.ToMoney(context.GetCart().Currency)); Field <MoneyType>("placedPrice", resolve: context => context.Source.PlacedPrice.ToMoney(context.GetCart().Currency)); Field <MoneyType>("placedPriceWithTax", resolve: context => context.Source.PlacedPriceWithTax.ToMoney(context.GetCart().Currency)); Field <MoneyType>("salePrice", resolve: context => context.Source.SalePrice.ToMoney(context.GetCart().Currency)); Field <MoneyType>("salePriceWithTax", resolve: context => context.Source.SalePriceWithTax.ToMoney(context.GetCart().Currency)); Field <MoneyType>("taxTotal", resolve: context => context.Source.TaxTotal.ToMoney(context.GetCart().Currency)); }