예제 #1
0
        public async Task<IActionResult> Add(AddCarsViewModel addCarsViewModel)
        {
            userID = HttpContext.Session.GetInt32("userID") ?? 0;
            if (ModelState.IsValid)
            {
                if (AddCarLongViewModel.Make == null)
                // Pull the car information using API
                {
                    // Vin API: https://github.com/writelinez/NHTSA-VehicleData
                    NHTSAClient nhtsaClient = new NHTSAClient();
                    VehicleDataResponse<VinDecodeResult> vinResult = await nhtsaClient.DecodeVinAsync(addCarsViewModel.VinNumber);
                    VinDecodeResult VinAPIResult = vinResult.Results.FirstOrDefault();

                    if (VinAPIResult != null)
                    {


                        Car car = new Car();
                        car.Make = VinAPIResult.Make;
                        car.Model = VinAPIResult.Model;
                        car.CurrentMiles = addCarsViewModel.CurrentMiles;
                        car.UserID = userID;
                        car.NextMaintenanceDays = 0;
                        car.NextMaintenanceMiles = 0;
                        car.VinNumber = addCarsViewModel.VinNumber;
                        car.Year = Int32.Parse(VinAPIResult.ModelYear);
                        context.Cars.Add(car);
                        context.SaveChanges();
                        return Redirect("/Cars/Index/" + car.ID);
                    }
                    else
                    {
                        // use the information from the user 
                        Car car = context.Cars.Where(x => x.ID == addCarsViewModel.CarID).FirstOrDefault();

                        car.ID = addCarsViewModel.CarID;
                        car.Make = addCarsViewModel.Make;
                        car.Model = addCarsViewModel.Model;
                        car.CurrentMiles = addCarsViewModel.CurrentMiles;
                        car.NextMaintenanceDays = addCarsViewModel.NextMaintenanceDays;
                        car.NextMaintenanceMiles = addCarsViewModel.NextMaintenanceMiles;
                        car.VinNumber = addCarsViewModel.VinNumber;
                        car.Year = addCarsViewModel.Year;
                        context.SaveChanges();
                        return Redirect("/Home/MainPage");

                    }
                }
            }

            return View(addCarsViewModel);


        }
예제 #2
0
        static void Main(string[] args)
        {
            NHTSAClient client = new NHTSAClient();

            Art.PrintApplicationTitle();

            Art.PrintTableRow(80, "Commands", "Parameters", "Example");
            foreach (var commandInfos in GetCommandInfos())
            {
                Art.PrintTableRow(80, commandInfos);
            }

            while (!canExit)
            {
                Console.WriteLine("Enter Command.");
                string input = Console.ReadLine();

                Console.WriteLine("Executing Command...");
                ExecuteCommand(input, client);
                Console.WriteLine("Complete.");
            }
        }
예제 #3
0
        static void ExecuteCommand(string input, NHTSAClient client)
        {
            string[] inputArray = input.Split(' ');
            string   command    = string.Empty;
            List <KeyValuePair <string, string> > commandParameters = new List <KeyValuePair <string, string> >();

            //parse command from input
            command = inputArray.ElementAtOrDefault(0);
            if (string.IsNullOrEmpty(command))
            {
                Art.PrintError("Invalid or missing command");
                return;
            }

            //parse command parameters
            if (inputArray.Length > 1)
            {
                foreach (var item in inputArray.Skip(1))
                {
                    string[] paramsArray = item.Split('=');
                    commandParameters.Add(new KeyValuePair <string, string>(paramsArray.ElementAtOrDefault(0), paramsArray.ElementAtOrDefault(1)));
                }
            }

            Type clientType = typeof(NHTSAClient);

            MethodInfo mi = clientType.GetMethods()
                            .FirstOrDefault(t => t.GetCustomAttribute <FunctionInfoAttribute>() != null && t.GetCustomAttribute <FunctionInfoAttribute>().Name.Equals(command));

            if (mi == null)
            {
                Art.PrintError($"{command} is an invalid command");
            }

            ParameterInfo[] pInfos = mi.GetParameters();

            //Only supports string parameters at current. Dont think i will need anything else here.
            object[] funcParameters = new object[pInfos.Length];
            int      fIndex         = 0;

            foreach (var item in pInfos)
            {
                var cParam = commandParameters.Where(t => t.Key.Equals(item.Name, StringComparison.CurrentCultureIgnoreCase));
                if (cParam.Count() == 1)
                {
                    funcParameters[fIndex] = ParameterConverter.Convert(cParam.Single().Value, item.ParameterType);
                    fIndex++;
                }
            }

            var result = mi.Invoke(client, funcParameters);

            if (result != null)
            {
                string jsonResult = JsonConvert.SerializeObject(result, Formatting.Indented);

                Console.BackgroundColor = ConsoleColor.White;
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine(jsonResult);
                Console.ResetColor();
            }
        }