Как получить два поля с одинаковым идентификатором - PullRequest
0 голосов
/ 03 февраля 2020

Мне нужно отправить два поля с одинаковым Id в Altair (GraphQl).

mutation{
  createGoodsOrder(goodsorder: {
    deliveryDate: "2019-10-10"
    goodsOrderItems: [
      { orderItemId: 54 quantity: 1 costPerUnit: 1 goodType: INGREDIENT }
      { orderItemId: 54 quantity: 2 costPerUnit: 2 goodType: INGREDIENT }
    #  { orderItemId: 58 quantity: 2 costPerUnit: 2 goodType: INGREDIENT }
    ]
  }){
    id
  }
}

Когда я выполняю мутацию, модель содержит оба поля с одинаковым Id, но когда я делаю Fetch, возвращается только первое. Если это не то же самое, Fetch возвращает оба поля. Как получить оба поля с одинаковым идентификатором?

var orderIngredients = _repository.Fetch<Ingredient>(e => model.GoodsOrderItems.Any(g => g.OrderItemId == e.Id)).ToList();

enter image description here

var orderIngredients = _repository.Fetch<Ingredient>(
                                        e => e.IngredientType.PlaceId == model.PlaceId
                                          && model.GoodsOrderItems.Any(g => g.OrderItemId == e.Id && g.GoodType == GoodsTypes.Ingredient))
                                        .Select(e => new GoodsOrderIngredientCreateModel
                                        {
                                            IngredientId = e.Id,
                                            Quantity = model.GoodsOrderItems.First(i => i.OrderItemId == e.Id).Quantity,
                                            CostPerUnit = model.GoodsOrderItems.First(i => i.OrderItemId == e.Id).CostPerUnit,
                                            TotalPrice = model.GoodsOrderItems.First(i => i.OrderItemId == e.Id).Quantity * 
                                                         model.GoodsOrderItems.First(i => i.OrderItemId == e.Id).CostPerUnit,
                                            GoodType = GoodsTypes.Ingredient
                                        }).Select(v => new GoodsOrderIngredient 
                                        {
                                            Id = v.Id,
                                            IngredientId = v.IngredientId,
                                            Quantity = v.Quantity,
                                            CostPerUnit = v.CostPerUnit,
                                            TotalPrice = v.TotalPrice
                                        }).ToList();

Мутация:

mutation.Field<GoodsOrderType>(
                name: "createGoodsOrder",
                arguments: new QueryArguments(
                    new QueryArgument<NonNullGraphType<GoodsOrderCreateInput>> { Name = nameof(GoodsOrder).ToLower() }
                ),
                resolve: context =>
                {
                    if (context.UserContext is GraphQLUserScopedContext userContext)
                    {
                        var goodsOrderService = userContext.ServiceScope.ServiceProvider.GetRequiredService<IVendorService>();

                        var model = context.GetArgument<GoodsOrderCreateModel>(nameof(GoodsOrder).ToLower());
                        model.PlaceId = userContext.User.PlaceId;
                        model.NetworkId = userContext.User.NetworkId;

                        var goodsOrder = goodsOrderService.CreateGoodsOrder(model);
                        return goodsOrder;
                    }
                    else
                        throw new ExecutionError(Constants.ErrorCodes.WrongUserContext);
                }).RequireAuthorization(PermissionsRequirement
                                                   .CreateForPermissionSetAll(
                                                       new Dictionary<NetworkPermissions, PermissionLevels>
                                                           { {NetworkPermissions.ERP_Cumulative, PermissionLevels.EditCreate} }));

1 Ответ

0 голосов
/ 05 февраля 2020

Я не знаю c#, но, вероятно, вам не нужны промежуточные типы

                                  var orderIngredients = _repository.Fetch<Ingredient>(
                                    e => e.IngredientType.PlaceId == model.PlaceId
                                      && model.GoodsOrderItems.Any(g => g.OrderItemId == e.Id && g.GoodType == GoodsTypes.Ingredient))
                                    .Select(v => new GoodsOrderIngredient 
                                    {
                                        Id = v.Id,
                                        IngredientId = v.IngredientId,
                                        Quantity = v.Quantity,
                                        CostPerUnit = v.CostPerUnit,
                                        TotalPrice = v.Quantity * v.CostPerUnit
                                    }).ToList();

PS. Если GoodsOrderIngredientCreateModel (для создания мутации?) Содержит TotalPrice, то итоговые вычисления уже находятся в БД?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...