public async Task <IHttpActionResult> ActivateProduct(long productId, ProductIn product)
        {
            CurrentIdentity identity = getIdentity();

            Product productCurrent = await db.Products.FindAsync(productId);

            if (productCurrent == null)
            {
                return(ResponseMessage(getHttpResponse(HttpStatusCode.NotFound)));
            }

            string userId = (await db.Shops.FindAsync(productCurrent.ShopId)).UserId;

            if (identity.userId == userId || identity.role == "Admin")
            {
                if (productCurrent.IsActive == 0)
                {
                    productCurrent.IsActive = 1;
                }
                else
                {
                    productCurrent.IsActive = 0;
                }

                db.Entry(productCurrent).State = EntityState.Modified;

                try
                {
                    await db.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ProductExists(productId))
                    {
                        return(ResponseMessage(getHttpResponse(HttpStatusCode.NotFound)));
                    }
                    else
                    {
                        throw;
                    }
                }
                return(StatusCode(HttpStatusCode.NoContent));
            }
            return(ResponseMessage(getHttpResponse(HttpStatusCode.Unauthorized)));
        }
        public async Task <IHttpActionResult> PostProduct(ProductIn productIn)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            CurrentIdentity identity    = getIdentity();
            Shop            shopToCheck = await db.Shops.FindAsync(productIn.ShopId);

            Product productsToCheck = await db.Products.FindAsync(productIn.ShopId);

            if (shopToCheck.UserId != identity.userId)
            {
                if (identity.role != "Admin")
                {
                    return(ResponseMessage(getHttpResponse(HttpStatusCode.Forbidden)));
                }
            }

            if (ProductTitleExistsInShop(productIn.Title, productIn.ShopId))
            {
                return(ResponseMessage(getHttpResponse(HttpStatusCode.Conflict)));
            }

            Product newProduct = new Product();

            newProduct.Title           = productIn.Title;
            newProduct.Description     = productIn.Description;
            newProduct.DescriptionFull = productIn.DescriptionFull;
            newProduct.Views           = 0;
            newProduct.IsActive        = 0;
            DateTime now = DateTime.Now;

            newProduct.CreatedAt = now;
            newProduct.UpdatedAt = now;
            newProduct.ShopId    = productIn.ShopId;
            newProduct.Stock     = productIn.Stock;
            newProduct.Price     = productIn.Price;

            db.Products.Add(newProduct);

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (ProductExists(newProduct.Id))
                {
                    return(ResponseMessage(getHttpResponse(HttpStatusCode.Conflict)));
                }
                else
                {
                    throw;
                }
            }

            if (productIn.Images != null)
            {
                foreach (var image in productIn.Images)
                {
                    Image newImage = new Image();
                    newImage.ProductId = newProduct.Id;
                    newImage.ImageUrl  = image;
                    db.Images.Add(newImage);
                }

                try
                {
                    await db.SaveChangesAsync();
                }
                catch (DbUpdateException)
                {
                    throw;
                }
            }

            if (productIn.CategoryId != null)
            {
                foreach (var category in productIn.CategoryId)
                {
                    ProductsToCategory newCategory = new ProductsToCategory();
                    newCategory.ProductId  = newProduct.Id;
                    newCategory.CategoryId = category;
                    db.ProductsToCategories.Add(newCategory);
                }

                try
                {
                    await db.SaveChangesAsync();
                }
                catch (DbUpdateException)
                {
                    throw;
                }
            }

            return(CreatedAtRoute("WSApi", new { id = newProduct.Id }, newProduct));
        }