public async Task CheckForDuplicateEntry()
        {
            var entry = new Step
            {
                Nickname    = "batman",
                JourneyName = "Test",
                TeamName    = "Test Team",
                Steps       = 100,
                Created     = DateTime.Now,
                DateStepped = DateTime.Now
            };

            var checkSubmitted = await entry.PostAsync(_azureSql);

            Assert.True(checkSubmitted);

            var checkDuplicate = await entry.CheckForDuplicateAsync(_azureSql);

            Assert.True(checkDuplicate);
        }
        public async Task <IActionResult> AddSteps([Bind("Nickname,JourneyName,TeamName,Steps,DateStepped,StepsTaken,StepsInRoute")] Step step)
        {
            if (step != null && !string.IsNullOrWhiteSpace(step.JourneyName) && (step.JourneyName.Length < 50) && !string.IsNullOrWhiteSpace(step.Nickname) && (step.Nickname.Length < 50) && step.Steps > 1)
            {
                step.Nickname    = step.Nickname.Trim();
                step.JourneyName = step.JourneyName.Trim();

                // Set the team name if one is not supplied.
                if (string.IsNullOrWhiteSpace(step.TeamName))
                {
                    step.TeamName = $"{step.JourneyName} Team";
                }

                // Block step values that are too large.
                if (step.StepsInRoute - (step.StepsTaken + step.Steps) < 0)
                {
                    // Let them know this was bad input maybe?
                    return(RedirectToAction("Index"));
                }

                // Prevent the submission of duplicate entries on the same day.
                var checkDuplicate = await step.CheckForDuplicateAsync(_azureSQL);

                if (checkDuplicate)
                {
                    var results = await Step.GetByNicknameAsync(step.Nickname, _azureSQL);

                    if (results.Any())
                    {
                        return(View("AddSteps", results));
                    }

                    results = await Step.GetByExactNicknameAsync(step.Nickname, _azureSQL);

                    return(View("AddSteps", results));
                }

                var teams = await Team.GetByTeamNameAsync(step.TeamName, _azureSQL);

                var team = teams.FirstOrDefault();

                if (team is null)
                {
                    var newTeam = new Team
                    {
                        TeamName    = step.TeamName,
                        Bio         = "Give me a cool bio.",
                        Active      = true,
                        Created     = DateTime.Now,
                        TeamWebsite = "https://thomasryan.xyz/",
                    };

                    var checkCreateTeam = await newTeam.PostAsync(_azureSQL);

                    if (!checkCreateTeam)
                    {
                        // Revert to the default if creating a new Team fails.
                        step.TeamName = $"{step.JourneyName} Team";
                    }
                }

                // Save this entry to the db.
                var checkSubmitted = await step.PostAsync(_azureSQL);

                if (checkSubmitted)
                {
                    var results = await Step.GetByNicknameAsync(step.Nickname, _azureSQL);

                    if (results.Any())
                    {
                        return(View("AddSteps", results));
                    }

                    results = await Step.GetByExactNicknameAsync(step.Nickname, _azureSQL);

                    return(View("AddSteps", results));
                }
            }
            // Submit steps anonymously.
            else if (step != null && !string.IsNullOrWhiteSpace(step.JourneyName) && (step.JourneyName.Length < 50) && string.IsNullOrWhiteSpace(step.Nickname) && step.Steps > 1)
            {
                step.Nickname    = $"{step.JourneyName} Team";
                step.JourneyName = step.JourneyName.Trim();

                // Set the team name if one is not supplied.
                if (string.IsNullOrWhiteSpace(step.TeamName))
                {
                    step.TeamName = $"{step.JourneyName} Team";
                }

                // Block step values that are too large.
                if (step.StepsInRoute - (step.StepsTaken + step.Steps) < 0)
                {
                    // Let them know this was bad input maybe?
                    return(Redirect($"/{step.JourneyName}/{step.TeamName}/"));
                }

                // Save this entry to the db.
                var checkSubmitted = await step.PostAsync(_azureSQL);

                if (checkSubmitted)
                {
                    var results = await Step.GetByNicknameAsync(step.Nickname, _azureSQL);

                    if (results.Any())
                    {
                        return(View("AddSteps", results));
                    }

                    results = await Step.GetByExactNicknameAsync(step.Nickname, _azureSQL);

                    return(View("AddSteps", results));
                }
            }
            // Show the page for the user.
            else if (step != null && step.Steps == 0 && !string.IsNullOrWhiteSpace(step.JourneyName) && (step.JourneyName.Length < 50) && !string.IsNullOrWhiteSpace(step.Nickname) && (step.Nickname.Length < 50))
            {
                step.Nickname    = step.Nickname.Trim();
                step.JourneyName = step.JourneyName.Trim();

                var results = await Step.GetByNicknameAsync(step.Nickname, _azureSQL);

                if (results.Any())
                {
                    return(View("AddSteps", results));
                }

                results = await Step.GetByExactNicknameAsync(step.Nickname, _azureSQL);

                return(View("AddSteps", results));
            }

            return(Redirect($"/{step?.JourneyName}"));
        }