public async Task <IActionResult> EditProduct(int id, ProductDetails model)
 {
     try
     {
         if (id != model.ProductId)
         {
             return(Ok(new ReturnModelValue(enumReturnStatus.Failed, "model_invalid", "Mandatory field are required.", model)));
         }
         else
         {
             var Data = _dbContext.Products.SingleOrDefault(x => x.ProductId == id);
             if (Data != null)
             {
                 Data.ProductName  = model.ProductName;
                 Data.Price        = model.Price;
                 Data.Description  = model.Description;
                 Data.ProductImage = model.ProductImage;
                 Data.Quantity     = model.Quantity;
                 _dbContext.Products.Update(Data);
                 _dbContext.SaveChanges();
                 return(new OkObjectResult(new ReturnModelValue(enumReturnStatus.Success, "Product_updated", "Product updated successfully.")));
             }
             else
             {
                 var resultReturnModel = new ReturnModelValue(enumReturnStatus.Failed, "Product Not found", "product details not found.");
                 return(Ok(resultReturnModel));
             }
         }
     }
     catch (Exception ex)
     {
         return(BadRequest(new { message = ex.Message }));
     }
 }
        public ActionResult PlaceOrder(SaveOrder model)
        {
            try
            {
                if (model != null)
                {
                    var UserId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value;
                    model.OrderBy = int.Parse(UserId);
                    var product           = _dbContext.Products.SingleOrDefault(x => x.ProductId == model.ProductId);
                    var availableQuantity = product.Quantity;
                    var appliedQuantity   = model.Quantity;

                    if (appliedQuantity > availableQuantity)
                    {
                        var resultReturnModel = new ReturnModelValue(enumReturnStatus.Failed, "There is no such quanties vailable", "Select Within a given quantity", null);
                        return(Ok(resultReturnModel));
                    }

                    else if (appliedQuantity == availableQuantity)
                    {
                        _dbContext.SaveOrders.Add(model);
                        _dbContext.SaveChanges();
                        var data = _dbContext.Products.SingleOrDefault(x => x.ProductId == model.ProductId);
                        _dbContext.Remove(data);
                        _dbContext.SaveChanges();
                        var resultReturnModel = new ReturnModelValue(enumReturnStatus.Success, "Order Purchase", "Purchased", null);
                        return(Ok(resultReturnModel));
                    }
                    else if (appliedQuantity < availableQuantity)
                    {
                        _dbContext.SaveOrders.Add(model);
                        _dbContext.SaveChanges();
                        var data            = _dbContext.Products.SingleOrDefault(x => x.ProductId == model.ProductId);
                        var CurrentQuantity = availableQuantity - appliedQuantity;
                        data.Quantity = CurrentQuantity;
                        _dbContext.Update(data);
                        _dbContext.SaveChanges();
                        var resultReturnModel = new ReturnModelValue(enumReturnStatus.Success, "Order Purchaes", "Purchased", null);
                        return(Ok(resultReturnModel));
                    }
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }
            return(null);
        }
        public async Task <ActionResult> GetProductById(int id)
        {
            var result = _dbContext.Products.FirstOrDefault(x => x.ProductId == id);

            try
            {
                if (result != null)
                {
                    var resultReturnModel = new ReturnModelValue(enumReturnStatus.Success, "Product Details", "Product Details", result);
                    return(Ok(resultReturnModel));
                }
                else
                {
                    var resultReturnModel = new ReturnModelValue(enumReturnStatus.Failed, "Product Not Found", "Product Not Found", null);
                    return(Ok(resultReturnModel));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }
        }
        public async Task <ActionResult> GetProduct()
        {
            var productInfo = await _dbContext.Products.ToListAsync();

            try
            {
                if (productInfo != null)
                {
                    var resultReturnModel = new ReturnModelValue(enumReturnStatus.Success, "Product_List", "Product Details", productInfo);
                    return(Ok(resultReturnModel));
                }

                else
                {
                    var resultReturnModel = new ReturnModelValue(enumReturnStatus.Failed, "No Product Not Fount", " No Product Not Fount", null);
                    return(Ok(resultReturnModel));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }
        }