public ActionResult BackFill()
        {
            BackFillViewModel viewModel = new BackFillViewModel();

            DataAccess dataAccess = new DataAccess();

            viewModel.BackFillBuild  = (dataAccess).GetRandomBackFillBuild();
            viewModel.BackFillCount  = (dataAccess).GetBackFillBuildsCount();
            viewModel.DisplayMessage = DisplayMessage.None;
            viewModel.IsSupported    = true;

            return(View(viewModel));
        }
        public ActionResult BackFill(BackFillViewModel backFillViewModel)
        {
            if (!string.IsNullOrWhiteSpace(backFillViewModel.FriendlyNameLong) &&
                !string.IsNullOrWhiteSpace(backFillViewModel.FriendlyNameShort) &&
                backFillViewModel.ReleaseDate.HasValue &&
                !string.IsNullOrWhiteSpace(backFillViewModel.ReferenceLink))
            {
                DataAccess  dataAccess     = new DataAccess();
                VersionInfo newVersionInfo = new VersionInfo()
                {
                    Major             = backFillViewModel.BackFillBuild.Major,
                    Minor             = backFillViewModel.BackFillBuild.Minor,
                    Build             = backFillViewModel.BackFillBuild.Build,
                    Revision          = backFillViewModel.BackFillBuild.Revision,
                    FriendlyNameLong  = backFillViewModel.FriendlyNameLong,
                    FriendlyNameShort = backFillViewModel.FriendlyNameShort,
                    ReleaseDate       = backFillViewModel.ReleaseDate.Value,
                    IsSupported       = backFillViewModel.IsSupported,
                    ReferenceLinks    = new List <string>()
                    {
                        backFillViewModel.ReferenceLink
                    }
                };

                if (dataAccess.AddVersionInfo(newVersionInfo))
                {
                    // this is the success condition
                    //
                    // remove the back fill build
                    //
                    if (dataAccess.DeleteBackFillBuild(backFillViewModel.BackFillBuild))
                    {
                        // this is our final and end result success condition
                        //
                        // at this point we want to show success and then next
                        // random build to fill
                        //
                        backFillViewModel = new BackFillViewModel();

                        backFillViewModel.BackFillBuild  = (dataAccess).GetRandomBackFillBuild();
                        backFillViewModel.BackFillCount  = (dataAccess).GetBackFillBuildsCount();
                        backFillViewModel.DisplayMessage = DisplayMessage.Success;
                        backFillViewModel.IsSupported    = true;

                        return(View(backFillViewModel));
                    }
                    else
                    {
                        // this is an error condition
                        // if we can't delete the back fill version then we need to keep it in
                        // the build and then attempt to delete the version as we don't want to
                        // have a vicious cycle of attempting to continue trying to fill an
                        // existing build
                        //
                        dataAccess.DeleteVersionInfo(newVersionInfo);

                        // now we need to report the error *without* keeping the data
                        //
                        backFillViewModel = new BackFillViewModel();
                        backFillViewModel.DisplayMessage = DisplayMessage.Error;

                        return(View(backFillViewModel));
                    }
                }
                else
                {
                    // something went wrong here so report the error
                    //
                    backFillViewModel = new BackFillViewModel();
                    backFillViewModel.DisplayMessage = DisplayMessage.Error;

                    return(View(backFillViewModel));
                }
            }
            else
            {
                // data isn't valid so display an error with existing data
                // so the user can reconnect
                //
                backFillViewModel.DisplayMessage = DisplayMessage.Error;
                return(View(backFillViewModel));
            }
        }