public ViewModel.ProductModel GetProductById(int id)
        {
            DomainDeriven.AkoSatrapDb context = new DomainDeriven.AkoSatrapDb();

            var product = context.Products.FirstOrDefault(r => r.Id == id);

            var productViewModel = new ViewModel.ProductModel
            {
                Id              = product.Id,
                Brand           = product.Brand,
                CategoryId      = product.ProductCategoryId.Value,
                Description     = product.Description,
                ImageFolderName = product.ImageFolderName
            };

            return(productViewModel);
        }
        public ViewModel.ReturnResult <bool> AddProduct(ViewModel.ProductModel product)
        {
            ViewModel.ReturnResult <bool> returnResult = new ViewModel.ReturnResult <bool>();

            try
            {
                DomainDeriven.AkoSatrapDb context = new DomainDeriven.AkoSatrapDb();
                var enDbProduct = new DomainDeriven.Product();
                var dbProduct   = new DomainDeriven.Product();

                enDbProduct.Brand             = product.EnBrand;
                enDbProduct.CreateDate        = DateTime.Now;
                enDbProduct.ImageFolderName   = Guid.NewGuid().ToString();
                enDbProduct.ImportantTip1     = product.EnImportantTip1;
                enDbProduct.ImportantTip2     = product.EnImportantTip2;
                enDbProduct.ImportantTip3     = product.EnImportantTip3;
                enDbProduct.IsEnglish         = true;
                enDbProduct.ProductCategoryId = product.Category.EnId;
                enDbProduct.Title             = product.EnTitle;
                enDbProduct.Description       = product.EnDescription;


                dbProduct.Brand             = product.Brand;
                dbProduct.CreateDate        = DateTime.Now;
                dbProduct.ImageFolderName   = enDbProduct.ImageFolderName;
                dbProduct.ImportantTip1     = product.ImportantTip1;
                dbProduct.ImportantTip2     = product.ImportantTip2;
                dbProduct.ImportantTip3     = product.ImportantTip3;
                dbProduct.IsEnglish         = false;
                dbProduct.ProductCategoryId = product.Category.Id;
                dbProduct.Title             = product.Title;
                dbProduct.Description       = product.Description;
                dbProduct.Product2          = enDbProduct;

                context.Products.Add(dbProduct);

                context.SaveChanges();
            }
            catch (Exception ex)
            {
                returnResult.SetError(ex.Message);
            }

            return(returnResult);
        }
        public ViewModel.ReturnResult <bool> UpdateProduct(ViewModel.ProductModel product)
        {
            ViewModel.ReturnResult <bool> returnResult = new ViewModel.ReturnResult <bool>();
            try
            {
                DomainDeriven.AkoSatrapDb context = new DomainDeriven.AkoSatrapDb();

                var dbProductCategory = context.Products.Include("Product2").FirstOrDefault(r => r.IsEnglish == false && r.Id == product.Id);
                if (dbProductCategory != null)
                {
                    dbProductCategory.Title         = product.Title;
                    dbProductCategory.Brand         = product.Brand;
                    dbProductCategory.ImportantTip1 = product.ImportantTip1;
                    dbProductCategory.ImportantTip2 = product.ImportantTip2;
                    dbProductCategory.ImportantTip3 = product.ImportantTip3;
                    dbProductCategory.Description   = product.Description;

                    dbProductCategory.Product2.Title         = product.EnTitle;
                    dbProductCategory.Product2.Brand         = product.EnBrand;
                    dbProductCategory.Product2.ImportantTip1 = product.EnImportantTip1;
                    dbProductCategory.Product2.ImportantTip2 = product.EnImportantTip2;
                    dbProductCategory.Product2.ImportantTip3 = product.EnImportantTip3;
                    dbProductCategory.Product2.Description   = product.EnDescription;

                    context.SaveChanges();
                }
                else
                {
                    returnResult.SetError("دسته بندی مورد نظر پیدا نشد");
                }


                context.SaveChanges();
            }
            catch (Exception ex)
            {
                returnResult.SetError(ex.Message);
            }

            return(returnResult);
        }
        public ViewModel.ProductModel GetProduct(int id)
        {
            DomainDeriven.AkoSatrapDb context = new DomainDeriven.AkoSatrapDb();
            var productView = new ViewModel.ProductModel();
            var product     = context.Products.Include("ProductCategory").Include("ProductFeatures").FirstOrDefault(r => r.Id == id);

            if (product != null)
            {
                productView = new ViewModel.ProductModel
                {
                    Category = new ViewModel.ProductCategotyModel
                    {
                        Title   = product.ProductCategory.Title,
                        Id      = product.ProductCategory.Id,
                        EnId    = product.Product2.ProductCategoryId.Value,
                        EnTitle = product.Product2.ProductCategory.Title
                    },

                    Brand           = product.Brand,
                    Id              = product.Id,
                    Title           = product.Title,
                    ImportantTip1   = product.ImportantTip1,
                    ImportantTip2   = product.ImportantTip2,
                    ImportantTip3   = product.ImportantTip3,
                    ImageFolderName = product.ImageFolderName,
                    CategoryId      = product.ProductCategoryId.Value,
                    Description     = product.Description
                };
                productView.ProductFeature = new List <ViewModel.ProductFeatureModel>();
                product.ProductFeatures.ToList().ForEach(feature => {
                    productView.ProductFeature.Add(new ViewModel.ProductFeatureModel {
                        Title = feature.Title, Id = feature.Id, Description = feature.Description
                    });
                });
            }

            return(productView);
        }