public SchemaMutation(ExerciseService exercises, TrainingScheduleService trainingSchedules, WorkoutService workoutService,
                              UserService userService)
        {
            Name = "Mutation";
            Field <ExerciseType>(
                "createExercise",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <ExerciseCreateInputType> > {
                Name = "exercise"
            }),
                resolve: context =>
            {
                var input = context.GetArgument <ExerciseCreateInputType>("exercise");
                var order = new Exercise {
                    Name = input.Name
                };
                return(exercises.CreateAsync(order));
            }
                );

            FieldAsync <TrainingScheduleType>(
                "createTrainingSchedule",
                arguments: new QueryArguments(new QueryArgument <NonNullGraphType <TrainingScheduleCreateInputType> >
            {
                Name = "trainingSchedule"
            }),
                resolve: async context =>
            {
                var input = context.GetArgument <TrainingScheduleCreateDto>("trainingSchedule");

                var trainingSchedule = new TrainingSchedule
                {
                    Name = input.Name,
                    User = await userService.GetUserByIdAsync(1),
                    TrainingScheduleExercises = input.ExercisesWithSets
                                                .Select(
                        exerciseIdWithSets => new TrainingScheduleExercise
                    {
                        ExerciseId = exerciseIdWithSets.Id,
                        Sets       = exerciseIdWithSets.Sets
                    }).ToList()
                };

                return(await context.TryAsyncResolve(async c =>
                                                     await trainingSchedules.CreateAsync(trainingSchedule)));
            }
                );

            FieldAsync <WorkoutType>(
                "createWorkout",
                arguments: new QueryArguments(new QueryArgument <NonNullGraphType <WorkoutCreateInputType> >
            {
                Name = "workout"
            }),
                resolve: async context =>
            {
                var input = context.GetArgument <WorkoutCreateDto>("workout");

                var trainingSchedule = new Workout
                {
                    User      = await userService.GetUserByIdAsync(1),
                    Exercises = input.Exercises
                                .Select(
                        exercise => new WorkoutExercise
                    {
                        ExerciseId = exercise.Id,
                        Sets       = exercise.Sets,
                        DateTime   = exercise.DateTime
                    }).ToList()
                };

                return(await context.TryAsyncResolve(async c =>
                                                     await workoutService.CreateAsync(trainingSchedule)));
            }
                );
        }