Example #1
0
        public StepChallengeMutation(StepContext db, StepsService stepsService)
        {
            Name = "Mutation";

            Field <StepsType>(
                "creatStepsEntry",
                arguments:  new QueryArguments(
                    new QueryArgument <NonNullGraphType <StepInputType> > {
                Name = "steps"
            }),
                resolve: context =>
            {
                var steps    = context.GetArgument <StepsInputs>("steps");
                var stepsDay = new DateTime(steps.DateOfSteps.Year, steps.DateOfSteps.Month, steps.DateOfSteps.Day, 0, 0, 0);

                var existingStepCount = db.Steps
                                        .Where(s => s.ParticipantId == steps.ParticipantId)
                                        .FirstOrDefault(s => s.DateOfSteps == stepsDay);

                if (existingStepCount != null)
                {
                    return(stepsService.Update(existingStepCount, steps));
                }

                return(stepsService.Create(steps));
            });
        }
Example #2
0
        public void Test_StepsOnlyCountedToLatestMonday_Total()
        {
            var teams        = TestData.GetTeams_StepsOverLeadBoardDate();
            var stepsService = new StepsService(GetMockContext());

            var total = stepsService.GetTotalSteps(teams, DateOfFirstWeek, StartDate, 3);

            const int expectedTotalSteps = ((10 * 3) + (20 * 3) + (30 * 3)) * 3;

            Assert.AreEqual(expectedTotalSteps, total, $"Expected TotalStepCount {expectedTotalSteps} but got {total} instead");
        }
Example #3
0
        public void Test_TeamsWithLessParticipants_GetAnExtraAveragedPerson()
        {
            var teams        = TestData.GetTeams_OneLessParticipantInTeamOne();
            var stepsService = new StepsService(GetMockContext());

            var       result = stepsService.GetTeamScores(teams, DateOfFirstWeek, StartDate, 3);
            var       teamWithLessParticipants = result.FirstOrDefault(t => t.TeamId == 1);
            const int teamActualTotal          = (3 * 30) * 2;
            const int expectedTotal            = (teamActualTotal / 2) * 1;

            Assert.AreEqual(expectedTotal, teamWithLessParticipants?.TeamStepCount, $"Expected TeamStepCount {expectedTotal} but got {teamWithLessParticipants?.TeamStepCount} instead");
        }
Example #4
0
        public void Test_StepsOnlyCountedToLatestMonday()
        {
            var teams        = TestData.GetTeams_StepsOverLeadBoardDate();
            var stepsService = new StepsService(GetMockContext());

            var       result         = stepsService.GetTeamScores(teams, DateOfFirstWeek, StartDate, 3);
            var       firstPlace     = result.First();
            const int expectedTeamId = 3;
            const int expectedTotal  = (3 * 30) * 3;

            Assert.AreEqual(expectedTeamId, firstPlace.TeamId, $"Expected TeamId {expectedTeamId} but got {firstPlace.TeamId} instead");
            Assert.AreEqual(expectedTotal, firstPlace.TeamStepCount, $"Expected TeamStepCount {expectedTeamId} but got {firstPlace.TeamStepCount} instead");
        }
Example #5
0
        public void Test_StepsOutOfDateRange_DoNotGetCounted()
        {
            var teams        = TestData.GetTeams_StepsOutsideOfRange();
            var stepsService = new StepsService(GetMockContext());

            var       result         = stepsService.GetTeamScores(teams, DateOfFirstWeek, StartDate, 3);
            var       firstPlace     = result.First();
            const int expectedTeamId = 3;
            const int expectedTotal  = (3 * 30) * 3;

            Assert.AreEqual(expectedTeamId, firstPlace.TeamId, $"Expected TeamId {expectedTeamId} but got {firstPlace.TeamId} instead");
            Assert.AreEqual(expectedTotal, firstPlace.TeamStepCount, $"Expected TeamStepCount {expectedTeamId} but got {firstPlace.TeamStepCount} instead");
        }
        public void Test_StepsAreCorrectEachDay()
        {
            var participant = TestData.GetParticipant();

            const int expectedCountPerDay = 10;
            var       expectedDays        = new List <DateTime>
            {
                StartDate,
                StartDate.AddDays(1),
                StartDate.AddDays(2),
            };

            var stepsService = new StepsService(GetMockStepContext(participant.Steps));
            var result       = stepsService.GetParticipantSteps(participant);

            Assert.That(result.Steps.All(s => s.StepCount == expectedCountPerDay), $"Expected every stepCount to equal {expectedCountPerDay}");
            Assert.That(result.Steps.All(s => expectedDays.Any(e => e == s.DateOfSteps)), $"Expected DateOfSteps to equal {expectedDays}");
        }
        public StepChallengeQuery(StepContext db, StepsService stepsService, TeamService teamService)
        {
            // TODO these should be set in the db and able to change
            var startDate = new DateTime(2019, 09, 16, 0, 0, 0);
            var endDate   = new DateTime(2019, 12, 05, 0, 0, 0);

            Field <ParticipantType>(
                "Participant",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "participantId", Description = "The ID of the Participant"
            }),
                resolve: context =>
            {
                var id = context.GetArgument <int>("participantId");

                var participant = db.Participants
                                  .Include("Team")
                                  .FirstOrDefault(i => i.ParticipantId == id);

                return(stepsService.GetParticipantSteps(participant));
            });

            Field <ListGraphType <UserType> >(
                "Users",
                resolve: context =>
            {
                var participants = db.Participants
                                   .Include("IdentityUser")
                                   .Include("Team");

                return(participants);
            });

            Field <ListGraphType <TeamScoreBoardType> >(
                "TeamSteps",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "teamId", Description = "The ID of the Team"
            }),
                resolve: context =>
            {
                var id        = context.GetArgument <int>("teamId");
                var teamSteps = teamService.GetTeamScoreBoard(id);

                return(teamSteps);
            });

            Field <TeamType>(
                "Team",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "teamId", Description = "The ID of the Team"
            }),
                resolve: context =>
            {
                var teamId = context.GetArgument <int>("teamId");
                var team   = db.Team
                             .Include("Participants")
                             .FirstOrDefault(t => t.TeamId == teamId);

                return(team);
            });

            Field <ListGraphType <TeamType> >(
                "Teams",
                resolve: context =>
            {
                var teams = db.Team
                            .Include("Participants")
                            .Include("Participants.Steps");

                return(teams);
            });

            Field <LeaderBoardType>(
                "LeaderBoard",
                resolve: context =>
            {
                var leaderBoard = new LeaderBoard();
                var settings    = db.ChallengeSettings
                                  .FirstOrDefault();

                if (settings == null || !settings.ShowLeaderBoard)
                {
                    leaderBoard.TeamScores = new List <TeamScores>();
                    return(leaderBoard);
                }

                var teams   = db.Team;
                leaderBoard = stepsService.GetLeaderBoard(teams);

                var teamSteps = leaderBoard.TeamScores.Select(t => new TeamScores
                {
                    TeamId        = t.TeamId,
                    TeamName      = t.TeamName,
                    TeamStepCount = settings.ShowLeaderBoardStepCounts ? t.TeamStepCount : 0
                }).ToList();

                leaderBoard.TeamScores = teamSteps;

                return(leaderBoard);
            });

            Field <AdminLeaderBoardType>(
                "AdminLeaderBoard",
                resolve: context =>
            {
                var teams = db.Team;

                var leaderBoard = stepsService.GetLeaderBoard(teams);

                return(leaderBoard);
            });

            Field <ChallengeSettingsType>(
                "ChallengeSettings",
                resolve: context =>
            {
                var settings = db.ChallengeSettings
                               .FirstOrDefault();

                return(settings);
            });
        }
Example #8
0
        public StepChallengeMutation(StepContext db, StepsService stepsService, ParticipantService participantService)
        {
            Name = "Mutation";

            Field <StepsType>(
                "creatStepsEntry",
                arguments:  new QueryArguments(
                    new QueryArgument <NonNullGraphType <StepInputType> > {
                Name = "steps"
            }),
                resolve: context =>
            {
                var steps    = context.GetArgument <StepsInputs>("steps");
                var stepsDay = new DateTime(steps.DateOfSteps.Year, steps.DateOfSteps.Month, steps.DateOfSteps.Day, 0, 0, 0);

                var existingStepCount = db.Steps
                                        .Where(s => s.ParticipantId == steps.ParticipantId)
                                        .FirstOrDefault(s => s.DateOfSteps == stepsDay);

                if (existingStepCount != null)
                {
                    return(stepsService.Update(existingStepCount, steps));
                }

                return(stepsService.Create(steps));
            });

            Field <ChallengeSettingsType>(
                "updateChallengeSettings",
                arguments:  new QueryArguments(
                    new QueryArgument <NonNullGraphType <ChallengeSettingsInputType> > {
                Name = "settings"
            }),
                resolve: context =>
            {
                var newSettings = context.GetArgument <ChallengeSettingsInput>("settings");

                var existingSettings = db.ChallengeSettings
                                       .FirstOrDefault();

                if (existingSettings != null)
                {
                    existingSettings.ShowLeaderBoard           = newSettings.ShowLeaderBoard;
                    existingSettings.ShowLeaderBoardStepCounts = newSettings.ShowLeaderBoardStepCounts;
                }

                db.SaveChanges();

                return(existingSettings);
            });

            Field <TeamType>(
                "updateTeam",
                arguments:  new QueryArguments(
                    new QueryArgument <NonNullGraphType <TeamInputType> > {
                Name = "team"
            }),
                resolve: context =>
            {
                var newTeamInfo = context.GetArgument <TeamInput>("team");

                var team = db.Team
                           .FirstOrDefault(t => t.TeamId == newTeamInfo.TeamId);

                if (team != null)
                {
                    team.TeamName             = newTeamInfo.TeamName;
                    team.NumberOfParticipants = newTeamInfo.NumberOfParticipants;
                }

                db.SaveChanges();
                return(team);
            });

            FieldAsync <ParticipantType>(
                "deleteParticipant",
                arguments:  new QueryArguments(
                    new QueryArgument <NonNullGraphType <ParticipantInputType> > {
                Name = "participant"
            }),
                resolve: async context =>
            {
                var participant = context.GetArgument <EditUserModel>("participant");

                var user = await db.Participants
                           .Where(u => u.ParticipantId == participant.ParticipantId)
                           .Include(u => u.IdentityUser)
                           .SingleOrDefaultAsync();

                if (user != null)
                {
                    await participantService.DeleteParticipant(user);
                }

                return(user);
            });
        }
 public StepsController(StepsService service)
 {
     _stepsService = service;
 }
        public StepChallengeQuery(StepContext db, StepsService stepsService)
        {
            // TODO these should be set in the db and able to change
            var startDate = new DateTime(2019, 09, 16, 0, 0, 0);
            var endDate   = new DateTime(2019, 12, 05, 0, 0, 0);

            Field <ParticipantType>(
                "Participant",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "participantId", Description = "The ID of the Participant"
            }),
                resolve: context =>
            {
                var id          = context.GetArgument <int>("participantId");
                var participant = db.Participants
                                  .Include("Team")
                                  .FirstOrDefault(i => i.ParticipantId == id);

                var steps = db.Steps
                            .Where(s => s.ParticipantId == id)
                            .Where(s => s.DateOfSteps >= startDate && s.DateOfSteps < endDate)
                            .OrderBy(s => s.DateOfSteps)
                            .ToList();

                if (participant != null)
                {
                    participant.Steps = steps;
                }

                return(participant);
            });

            Field <ListGraphType <UserType> >(
                "Users",
                resolve: context =>
            {
                var participants = db.Participants
                                   .Include("IdentityUser")
                                   .Include("Team");

                return(participants);
            });

            Field <ListGraphType <StepsType> >(
                "TeamSteps",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "teamId", Description = "The ID of the Team"
            }),
                resolve: context =>
            {
                var id   = context.GetArgument <int>("teamId");
                var team = db.Team
                           .Include("Participants")
                           .FirstOrDefault(i => i.TeamId == id);

                var teamSteps = db.Steps
                                .Where(s => team.Participants.Any(t => t.ParticipantId == s.ParticipantId))
                                .Where(s => s.DateOfSteps >= startDate && s.DateOfSteps < endDate)
                                .GroupBy(s => s.DateOfSteps)
                                .Select(s => new Steps
                {
                    DateOfSteps = s.First().DateOfSteps,
                    StepCount   = s.Sum(st => st.StepCount)
                })
                                .OrderBy(s => s.DateOfSteps)
                                .ToList();

                return(teamSteps);
            });

            Field <TeamType>(
                "Team",
                arguments: new QueryArguments(
                    new QueryArgument <IdGraphType> {
                Name = "teamId", Description = "The ID of the Team"
            }),
                resolve: context =>
            {
                var teamId = context.GetArgument <int>("teamId");
                var team   = db.Team
                             .Include("Participants")
                             .FirstOrDefault(t => t.TeamId == teamId);

                return(team);
            });

            Field <ListGraphType <TeamType> >(
                "Teams",
                resolve: context =>
            {
                var teams = db.Team
                            .Include("Participants")
                            .Include("Participants.Steps");

                return(teams);
            });

            Field <LeaderBoardType>(
                "LeaderBoard",
                resolve: context =>
            {
                var leaderBoard = new LeaderBoard();

                var teamSteps = db.Team
                                .Select(t => new TeamScores
                {
                    TeamId        = t.TeamId,
                    TeamName      = t.TeamName,
                    TeamStepCount = t.Participants.Sum(u => u.Steps.Sum(s => s.StepCount))
                }).ToList();

                leaderBoard.TeamScores = teamSteps;

                return(leaderBoard);
            });
        }
        public StepChallengeMutation(StepContext db, StepsService stepsService)
        {
            Name = "Mutation";

            Field <StepsType>(
                "creatStepsEntry",
                arguments:  new QueryArguments(
                    new QueryArgument <NonNullGraphType <StepInputType> > {
                Name = "steps"
            }),
                resolve: context =>
            {
                var steps    = context.GetArgument <StepsInputs>("steps");
                var stepsDay = new DateTime(steps.DateOfSteps.Year, steps.DateOfSteps.Month, steps.DateOfSteps.Day, 0, 0, 0);

                var existingStepCount = db.Steps
                                        .Where(s => s.ParticipantId == steps.ParticipantId)
                                        .FirstOrDefault(s => s.DateOfSteps == stepsDay);

                if (existingStepCount != null)
                {
                    return(stepsService.Update(existingStepCount, steps));
                }

                return(stepsService.Create(steps));
            });

            Field <ChallengeSettingsType>(
                "updateChallengeSettings",
                arguments:  new QueryArguments(
                    new QueryArgument <NonNullGraphType <ChallengeSettingsInputType> > {
                Name = "settings"
            }),
                resolve: context =>
            {
                var newSettings = context.GetArgument <ChallengeSettingsInput>("settings");

                var existingSettings = db.ChallengeSettings
                                       .FirstOrDefault();

                if (existingSettings != null)
                {
                    existingSettings.ShowLeaderBoard           = newSettings.ShowLeaderBoard;
                    existingSettings.ShowLeaderBoardStepCounts = newSettings.ShowLeaderBoardStepCounts;
                }

                db.SaveChanges();

                return(existingSettings);
            });

            Field <TeamType>(
                "updateTeam",
                arguments:  new QueryArguments(
                    new QueryArgument <NonNullGraphType <TeamInputType> > {
                Name = "team"
            }),
                resolve: context =>
            {
                var newTeamInfo = context.GetArgument <TeamInput>("team");

                var team = db.Team
                           .FirstOrDefault(t => t.TeamId == newTeamInfo.TeamId);

                if (team != null)
                {
                    team.TeamName             = newTeamInfo.TeamName;
                    team.NumberOfParticipants = newTeamInfo.NumberOfParticipants;
                }

                db.SaveChanges();
                return(team);
            });
        }