/// <inheritdoc/>
        public async Task <StoreItem> CreateStoreItemAsync(UpdateStoreItemRequest createRequest)
        {
            var dbProduct = _productContext.Products.Where(p => p.Id == createRequest.ProductId).FirstOrDefault();

            if (dbProduct == null)
            {
                throw new RequestedResourceHasConflictException("Product");
            }

            var dbAllowedSectionCatagegories = _categoryContext.Categories.Where(c => c.StoreHiveSectionId == createRequest.HiveSectionId && c.ProductCategoryId == dbProduct.Category.Id).FirstOrDefault();

            if (dbAllowedSectionCatagegories == null)
            {
                throw new RequestedResourceHasConflictException("Unallowable product category for this hive section.");
            }

            var dbStoreItem = Mapper.Map <UpdateStoreItemRequest, DbStoreItem>(createRequest);

            dbStoreItem.CreatedDate = DateTime.UtcNow;
            _storeItemContext.Items.Add(dbStoreItem);

            await _storeItemContext.SaveChangesAsync();

            return(Mapper.Map <StoreItem>(dbStoreItem));
        }
        public async Task <StoreItem> UpdateStoreItemAsync(int storeItemId, UpdateStoreItemRequest updateRequest)
        {
            var dbProduct = _productContext.Products.Where(p => p.Id == updateRequest.ProductId).FirstOrDefault();

            if (dbProduct == null)
            {
                throw new RequestedResourceHasConflictException("Product");
            }

            var dbAllowedSectionCatagegories = _categoryContext.Categories.Where(c => c.StoreHiveSectionId == updateRequest.HiveSectionId && c.ProductCategoryId == dbProduct.Category.Id).FirstOrDefault();

            if (dbAllowedSectionCatagegories == null)
            {
                throw new RequestedResourceHasConflictException("Unallowable product category for this hive section.");
            }

            var dbStoreItems = await _storeItemContext.Items.Where(i => i.Id == storeItemId).ToArrayAsync();

            if (dbStoreItems.Length == 0)
            {
                throw new RequestedResourceNotFoundException();
            }

            var dbStoreItem = dbStoreItems[0];

            if (dbStoreItem.IsApproved != updateRequest.IsApproved)
            {
                dbStoreItem.ConfirmationDate = DateTime.UtcNow;
            }

            Mapper.Map(updateRequest, dbStoreItem);

            await _storeItemContext.SaveChangesAsync();

            return(Mapper.Map <StoreItem>(dbStoreItem));
        }