Beispiel #1
0
        /// <summary>
        /// A Method to delete the car asynchronously.
        /// </summary>
        /// <returns></returns>
        private async Task DeleteCarAsync()
        {
            using (var a9 = new Asphalt9Entities())
            {
                using (var transaction = a9.Database.BeginTransaction())
                {
                    try
                    {
                        // Finding the requested car from entities.
                        var carToDelete = a9.Grandes
                                          .FirstOrDefault(item => string.Concat(item.Brand, " ", item.CarName).Equals(Car.FullName));

                        var imgName = carToDelete?.CarImage;

                        if (carToDelete != null)
                        {
                            // Deleting the car asynchronously.
                            await DeleteCarAsync(a9, carToDelete, transaction);

                            // Removing the car from car collection as well as empty the car property.
                            var currentDispatcher = Application.Current.Dispatcher;
                            currentDispatcher?.Invoke(() =>
                            {
                                if (Car == null)
                                {
                                    return;
                                }
                                CarCollection.Remove(Car);

                                _car = new Car();
                                RaisePropertyChanged(nameof(Car));
                            });

                            // Notifying that the operation succeeded.
                            Status = $"{carToDelete.Brand} {carToDelete.CarName} Has Been Deleted Successfully.";

                            // Avoiding "The Image used by another process" warning issue.
                            // Not good practice but anyway.
                            GC.Collect();
                            GC.WaitForPendingFinalizers();

                            // Deleting the car image from app images directory.
                            if (FileHelpers.IsImageExist(imgName))
                            {
                                File.Delete(FileHelpers.ImagePath(imgName));
                            }
                        }
                    }
                    catch
                    {
                        // Rolling back adding the car in case an error occurred.
                        transaction.Rollback();
                        Status = @"Error occurred while deleting the car!";
                    }
                }
            }
        }
        /// <summary>
        /// Check whether the car can be updated.
        /// </summary>
        /// <param name="sender"></param>
        /// <returns></returns>
        private bool CanSubmit(object sender)
        {
            using (var a9 = new Asphalt9Entities())
            {
                var carToDelete =
                    a9.Grandes
                    .SingleOrDefault(item => string.Concat(item.Brand, " ", item.CarName)
                                     .Equals(Car.FullName));

                return((carToDelete != null) ? true : false);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Removing the car from database.
        /// </summary>
        /// <param name="a9">Asphalt9Entities</param>
        /// <param name="carToDelete">Car to delete.</param>
        /// <param name="transaction">Transaction.</param>
        /// <returns></returns>
        private async Task DeleteCarAsync(Asphalt9Entities a9, Grande carToDelete, DbContextTransaction transaction)
        {
            await Task.Run(() =>
            {
                // Removing the entity related to the requested car to delete.
                a9.Grandes.Remove(carToDelete);

                // saving changes.
                a9.SaveChanges();

                // committing the saved changes into the database.
                transaction.Commit();
            });
        }
        /// <summary>
        /// Updating the car asynchronously.
        /// </summary>
        /// <returns></returns>
        private async Task ProcessingUpdateAsync()
        {
            using (var a9 = new Asphalt9Entities())
            {
                using (var transaction = a9.Database.BeginTransaction())
                {
                    try
                    {
                        // Updating the car.
                        await UpdateCarAsync(a9, Car.FullName);


                        // Saving the update.
                        a9.SaveChanges();

                        // committing the saved changes into the database.
                        transaction.Commit();

                        // Saving the input image to app image directory.
                        if (!FileHelpers.IsImageExist(ImageName))
                        {
                            var encoder = new PngBitmapEncoder();

                            encoder.Frames.Add(BitmapFrame.Create(CarImage));

                            var imagePath = FileHelpers.ImagePath(imageName: ImageName);

                            using (var fileStream = new FileStream(imagePath, FileMode.Create))
                            {
                                encoder.Save(fileStream);
                            }
                        }

                        Status = $"{Car.FullName} Has been updated successfully.";
                    }
                    catch
                    {
                        // Rolling back adding the car in case an error occurred.
                        transaction.Rollback();
                        Status = @"Error occurred while updating the car!";
                    }
                }
            }
        }
        /// <summary>
        /// Replacing the old properties with new ones.
        /// </summary>
        /// <param name="a9">Asphalt 9 Entity</param>
        /// <param name="CarName">Car name</param>
        /// <returns></returns>
        private async Task UpdateCarAsync(Asphalt9Entities a9, string CarName)
        {
            var carToUpdate =
                a9.Grandes
                .FirstOrDefault(item =>
                                string.Concat(item.Brand, " ", item.CarName)
                                .Equals(CarName));


            await Task.Run(() =>
            {
                // Updating Car Information
                carToUpdate.Brand       = Car.CarBrand;
                carToUpdate.CarName     = Car.CarName;
                carToUpdate.CarClass    = Car.CarClass;
                carToUpdate.CarType     = Car.Type;
                carToUpdate.Fuel        = Car.Fuel;
                carToUpdate.Refill      = Car.Refill;
                carToUpdate.ReleaseDate = Car.ReleaseDate;

                // Updating Max Stats
                carToUpdate.MaxDetail.TopSpeed     = Car.Performance.MaxTopSpeed;
                carToUpdate.MaxDetail.Acceleration = Car.Performance.MaxAcceleration;
                carToUpdate.MaxDetail.Handling     = Car.Performance.MaxHandling;
                carToUpdate.MaxDetail.Nitro        = Car.Performance.MaxNitro;

                // Updating Stock Stats
                carToUpdate.StockDetail.TopSpeed     = Car.Performance.StockTopSpeed;
                carToUpdate.StockDetail.Acceleration = Car.Performance.StockAcceleration;
                carToUpdate.StockDetail.Handling     = Car.Performance.StockHandling;
                carToUpdate.StockDetail.Nitro        = Car.Performance.StockNitro;

                // Updating Ranks
                carToUpdate.StarRank.FirstStarRank  = Car.Ranks.FirstStar;
                carToUpdate.StarRank.SecondStarRank = Car.Ranks.SecondStar;
                carToUpdate.StarRank.ThirdStarRank  = Car.Ranks.ThirdStar;
                carToUpdate.StarRank.FourthStarRank = Car.Ranks.FourthStar;
                carToUpdate.StarRank.FifthStarRank  = Car.Ranks.FifthStar;
                carToUpdate.StarRank.SixthStarRank  = Car.Ranks.SixthStar;
                carToUpdate.StarRank.Max            = Car.Ranks.Max;

                // Updating Blueprints
                carToUpdate.Blueprint.FirstStarBP  = Car.Blueprints.FirstStar;
                carToUpdate.Blueprint.SecondStarBP = Car.Blueprints.SecondStar;
                carToUpdate.Blueprint.ThirdStarBP  = Car.Blueprints.ThirdStar;
                carToUpdate.Blueprint.FourthStarBP = Car.Blueprints.FourthStar;
                carToUpdate.Blueprint.FifthStarBP  = Car.Blueprints.FifthStar;
                carToUpdate.Blueprint.SixthStarBP  = Car.Blueprints.SixthStar;

                // Updating Upgrades
                carToUpdate.Upgrade.Stage1  = Car.Upgrades.Stage0;
                carToUpdate.Upgrade.Stage2  = Car.Upgrades.Stage1;
                carToUpdate.Upgrade.Stage3  = Car.Upgrades.Stage2;
                carToUpdate.Upgrade.Stage4  = Car.Upgrades.Stage3;
                carToUpdate.Upgrade.Stage5  = Car.Upgrades.Stage4;
                carToUpdate.Upgrade.Stage6  = Car.Upgrades.Stage5;
                carToUpdate.Upgrade.Stage7  = Car.Upgrades.Stage6;
                carToUpdate.Upgrade.Stage8  = Car.Upgrades.Stage7;
                carToUpdate.Upgrade.Stage9  = Car.Upgrades.Stage8;
                carToUpdate.Upgrade.Stage10 = Car.Upgrades.Stage9;
                carToUpdate.Upgrade.Stage11 = Car.Upgrades.Stage10;
                carToUpdate.Upgrade.Stage12 = Car.Upgrades.Stage11;
                carToUpdate.Upgrade.Stage13 = Car.Upgrades.Stage12;
                carToUpdate.Upgrade.Total   = Car.Upgrades.TotalStagesCost;

                // Updating Uncommon Parts
                carToUpdate.UncommonPart.Quantity  = Car.AdditionalParts.UncommonQuantity;
                carToUpdate.UncommonPart.Cost      = Car.AdditionalParts.UncommonCost;
                carToUpdate.UncommonPart.TotalCost = Car.AdditionalParts.UncommonTotalCost;

                // Updating Rare Parts
                carToUpdate.RarePart.Quantity  = Car.AdditionalParts.RareQuantity;
                carToUpdate.RarePart.Cost      = Car.AdditionalParts.RareCost;
                carToUpdate.RarePart.TotalCost = Car.AdditionalParts.RareTotalCost;

                // Updating Epic Parts
                carToUpdate.EpicPart.Quantity  = Car.AdditionalParts.EpicQuantity;
                carToUpdate.EpicPart.Cost      = Car.AdditionalParts.EpicCost;
                carToUpdate.EpicPart.TotalCost = Car.AdditionalParts.EpicTotalCost;
            });
        }
        /// <summary>
        /// Adding the new car asynchronously.
        /// </summary>
        /// <returns></returns>
        private async Task AddCarAsync()
        {
            using (var a9 = new Asphalt9Entities())
            {
                using (var transaction = a9.Database.BeginTransaction())
                {
                    try
                    {
                        // creating new entity with the given car information by the user.
                        var newCar = new Grande
                        {
                            Brand       = Car.CarBrand,
                            CarName     = Car.CarName,
                            CarClass    = Car.CarClass,
                            CarType     = Enum.Parse(typeof(CarType), Car.Type).ToString(),
                            Fuel        = Car.Fuel,
                            CarImage    = string.Concat(Car.CarClass.ToLower(), "_", ImageName),
                            Refill      = Car.Refill,
                            ReleaseDate = Car.ReleaseDate,
                            Stars       = Car.Stars,

                            // every single grande entity has the links with other entities via foreign key created in database.

                            Blueprint = new Entities.Blueprint()
                            {
                                FirstStarBP  = Car.Blueprints.FirstStar,
                                SecondStarBP = Car.Blueprints.SecondStar,
                                ThirdStarBP  = Car.Blueprints.ThirdStar,
                                FourthStarBP = Car.Blueprints.FourthStar,
                                FifthStarBP  = Car.Blueprints.FifthStar,
                                SixthStarBP  = Car.Blueprints.SixthStar,
                                TotalBP      = Car.Blueprints.Total
                            },

                            StockDetail = new StockDetail()
                            {
                                TopSpeed     = Car.Performance.StockTopSpeed,
                                Acceleration = Car.Performance.StockAcceleration,
                                Handling     = Car.Performance.StockHandling,
                                Nitro        = Car.Performance.StockNitro,
                            },

                            MaxDetail = new MaxDetail()
                            {
                                TopSpeed     = Car.Performance.MaxTopSpeed,
                                Acceleration = Car.Performance.MaxAcceleration,
                                Handling     = Car.Performance.MaxHandling,
                                Nitro        = Car.Performance.MaxNitro,
                            },

                            StarRank = new StarRank()
                            {
                                StockStarRank  = Car.Ranks.Stock,
                                FirstStarRank  = Car.Ranks.FirstStar,
                                SecondStarRank = Car.Ranks.SecondStar,
                                ThirdStarRank  = Car.Ranks.ThirdStar,
                                FourthStarRank = Car.Ranks.FourthStar,
                                FifthStarRank  = Car.Ranks.FifthStar,
                                SixthStarRank  = Car.Ranks.SixthStar,
                                Max            = Car.Ranks.Max
                            },

                            Upgrade = new Upgrade()
                            {
                                Stage1  = Car.Upgrades.Stage0,
                                Stage2  = Car.Upgrades.Stage1,
                                Stage3  = Car.Upgrades.Stage2,
                                Stage4  = Car.Upgrades.Stage3,
                                Stage5  = Car.Upgrades.Stage4,
                                Stage6  = Car.Upgrades.Stage5,
                                Stage7  = Car.Upgrades.Stage6,
                                Stage8  = Car.Upgrades.Stage7,
                                Stage9  = Car.Upgrades.Stage8,
                                Stage10 = Car.Upgrades.Stage9,
                                Stage11 = Car.Upgrades.Stage10,
                                Stage12 = Car.Upgrades.Stage11,
                                Stage13 = Car.Upgrades.Stage12,
                                Total   = Car.Upgrades.TotalStagesCost
                            },

                            UncommonPart = new UncommonPart()
                            {
                                Cost      = Car.AdditionalParts.UncommonCost,
                                Quantity  = Car.AdditionalParts.UncommonQuantity,
                                TotalCost = Car.AdditionalParts.UncommonTotalCost
                            },

                            RarePart = new RarePart()
                            {
                                Cost      = Car.AdditionalParts.RareCost,
                                Quantity  = Car.AdditionalParts.RareQuantity,
                                TotalCost = Car.AdditionalParts.RareTotalCost
                            },

                            EpicPart = new EpicPart()
                            {
                                Cost      = Car.AdditionalParts.EpicCost,
                                Quantity  = Car.AdditionalParts.EpicQuantity,
                                TotalCost = Car.AdditionalParts.EpicTotalCost
                            }
                        };

                        // here we check if the current car is new or already exist.
                        if (a9.Grandes
                            .Any(item => string.Concat(item.Brand, " ", item.CarName) ==
                                 string.Concat(newCar.Brand, " ", newCar.CarName)))
                        {
                            Status = "Another car with same name is already exists!";
                            return;
                        }

                        // Adding new Car
                        a9.Grandes.Add(newCar);

                        // saving the addition.
                        a9.SaveChanges();

                        // Committing the addition of the new car into the database.
                        transaction.Commit();

                        // Saving the image into app image directory.
                        await Task.Run(() =>
                        {
                            var encoder = new PngBitmapEncoder();

                            encoder.Frames.Add(item: BitmapFrame.Create(source: CarImage));

                            var imagePath = FileHelpers.ImagePath(imageName: newCar.CarImage);

                            using (var fileStream = new FileStream(path: imagePath, mode: FileMode.Create))
                            {
                                encoder.Save(stream: fileStream);
                            }
                        });

                        // Notifying the state of operation.
                        Status = $"{newCar.Brand} {newCar.CarName} has been added successfully.";
                    }
                    catch
                    {
                        // Rolling back adding the car in case an error occurred.
                        transaction.Rollback();
                        Status = @"Error occurred while adding the car!";
                    }
                }
            }
        }
 /// <summary>
 /// Executing a stored procedure asynchronously to get cars.
 /// </summary>
 /// <param name="carClass">The Class to get cars.</param>
 /// <param name="a9">Asphalt 9 Entity</param>
 /// <param name="isClass">is class has been provided or not.</param>
 /// <returns>A List of cars depending on whether the class has been specified if yes then the list of specified class
 /// if not get all available cars.</returns>
 public async Task <List <AddCars_Result> > GettingCarsAsync(string carClass, Asphalt9Entities a9, bool isClass = true)
 {
     return(await a9.Database.SqlQuery <AddCars_Result>(sql : "EXEC AddCars {0}, {1}", carClass, isClass).ToListAsync());
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="chapter">Career Chapter</param>
 /// <param name="a9">Asphalt 9 Entity</param>
 /// <param name="isChapter">is chapter has been provided or not.</param>
 /// <returns>A List of career chapters depending on whether the chapter has been specified if yes then the list of specified chapter informations
 /// if not get all chapters informations.</returns>
 public async Task <List <AddChapters_Result> > GettingCareerAsync(int chapter, Asphalt9Entities a9, bool isChapter = true)
 {
     return(await a9.Database.SqlQuery <AddChapters_Result>(sql : "EXEC AddChapters {0}, {1}", chapter, isChapter).ToListAsync());
 }
 /// <summary>
 /// Executing a stored procedure asynchronously to get the given car informations.
 /// </summary>
 /// <param name="carName">Car Name</param>
 /// <param name="a9">Asphalt 9 Entity</param>
 /// <returns>A Task of all informations required for a specific car.</returns>
 public async Task <AddCar_Result> GettingCarAsync(string carName, Asphalt9Entities a9)
 {
     return(await a9.Database.SqlQuery <AddCar_Result>(sql : "EXEC AddCar {0}", carName).FirstOrDefaultAsync());
 }