Пример #1
0
 public void Created(ProductInfoEntity entity)
 {
     _logger.LogDebug(nameof(Created));
     try
     {
         var existingProductAvailability = _kubernetesClient.ApiClient.GetNamespacedCustomObject(
             ProductAvailabilityEntity.CrdGroup
             , ProductAvailabilityEntity.CrdApiVersion
             , Namespace, ProductAvailabilityEntity.CrdPluralName, entity.Metadata.Name);
     }
     catch (HttpOperationException ex)
     {
         if (ex.Response.StatusCode == HttpStatusCode.NotFound)
         {
             var x = new ProductAvailabilityEntity
             {
                 ApiVersion = ProductAvailabilityEntity.CrdGroup + "/" + ProductAvailabilityEntity.CrdApiVersion,
                 Kind       = ProductAvailabilityEntity.CrdKind,
                 Metadata   = { Name = entity.Metadata.Name },
                 Spec       =
                 {
                     LastUpdateTimeStamp = DateTime.UtcNow,
                     AvailableQuantity   = entity.Spec.MaximumQuantity
                 }
             };
             var body = JObject.FromObject(x, _camelCaseSerializer);
             _kubernetesClient.ApiClient.CreateNamespacedCustomObject(body, ProductAvailabilityEntity.CrdGroup
                                                                      , ProductAvailabilityEntity.CrdApiVersion
                                                                      , Namespace, ProductAvailabilityEntity.CrdPluralName);
         }
     }
 }
Пример #2
0
        public ActionResult <ProductAvailabilityReadDto> GetProductFromWareHouse(GetProductCommand getProductCommand)
        {
            var productAvailabilityJson = _kubernetesClient.GetNamespacedCustomObject(
                ProductAvailabilityEntity.CrdGroup,
                ProductAvailabilityEntity.CrdApiVersion, Namespace,
                ProductAvailabilityEntity.CrdPluralName, getProductCommand.ProductId) as JObject;
            var productAvailability = productAvailabilityJson.ToObject <ProductAvailabilityEntity>();

            if (productAvailability.Spec.AvailableQuantity >= getProductCommand.Quantity)
            {
                var x = new ProductAvailabilityEntity
                {
                    ApiVersion = ProductAvailabilityEntity.CrdGroup + "/" + ProductAvailabilityEntity.CrdApiVersion,
                    Kind       = ProductAvailabilityEntity.CrdKind,
                    Metadata   =
                    {
                        Name            = getProductCommand.ProductId,
                        ResourceVersion = productAvailability.Metadata.ResourceVersion
                    },
                    Spec =
                    {
                        LastUpdateTimeStamp = DateTime.UtcNow,
                        AvailableQuantity   = productAvailability.Spec.AvailableQuantity - getProductCommand.Quantity
                    }
                };
                var body = JObject.FromObject(x, _camelCaseSerializer);

                productAvailabilityJson = _kubernetesClient.ReplaceNamespacedCustomObject(body, ProductAvailabilityEntity.CrdGroup, ProductAvailabilityEntity.CrdApiVersion
                                                                                          , Namespace, ProductAvailabilityEntity.CrdPluralName, getProductCommand.ProductId) as JObject;
                productAvailability = productAvailabilityJson.ToObject <ProductAvailabilityEntity>();

                return(new ProductAvailabilityReadDto
                {
                    AvailableQuantity = productAvailability.Spec.AvailableQuantity,
                    Id = productAvailability.Metadata.Name
                });
            }

            return(BadRequest(new
            {
                Error =
                    $"There are only {productAvailability.Spec.AvailableQuantity} items for product {getProductCommand.ProductId}, {getProductCommand.Quantity} items cannot be requested"
            }));
        }
Пример #3
0
        public ActionResult <ProductAvailabilityReadDto> AddProductAvailability(ProductAvailabilityDto productAvailabilityDto)
        {
            var x = new ProductAvailabilityEntity
            {
                ApiVersion = ProductAvailabilityEntity.CrdGroup + "/" + ProductAvailabilityEntity.CrdApiVersion,
                Kind       = ProductAvailabilityEntity.CrdKind,
                Metadata   = { Name = productAvailabilityDto.Id },
                Spec       =
                {
                    AvailableQuantity = productAvailabilityDto.AvailableQuantity
                }
            };

            var body    = JObject.FromObject(x, _camelCaseSerializer);
            var retJson = _kubernetesClient.CreateNamespacedCustomObject(body, ProductAvailabilityEntity.CrdGroup
                                                                         , ProductAvailabilityEntity.CrdApiVersion
                                                                         , Namespace, ProductAvailabilityEntity.CrdPluralName) as JObject;
            var ret = retJson.ToObject <ProductAvailabilityEntity>();

            return(new ProductAvailabilityReadDto {
                AvailableQuantity = ret.Spec.AvailableQuantity, Id = ret.Metadata.Name, CreationTimeStamp = ret.Metadata.CreationTimestamp
            });
        }