public async Task <ActionResult <Events> > GetEvents()
        {
            var response = await _client.RequestAsync <GetEvents, Events>(new GetEvents(), default(Guid),
                                                                          cfg => cfg.WithExchange(ex => ex.WithName("Queries")).WithRoutingKey("getevents.#").WithReplyQueue(q => q.WithName(nameof(GetEvents))));

            return(response);
        }
예제 #2
0
        // Get a profile from a UserID
        public async Task <Profile> GetProfileFromAccountId(Guid id)
        {
            var profileData = (await _queue.RequestAsync <ProfileRequestMessage, ResultMessage>(
                                   new ProfileRequestMessage {
                UserAccountId = id,
            }
                                   )).data as ProfileData;
            Profile p = new Profile();

            p.Id              = profileData.Id;
            p.Username        = profileData.Username;
            p.TrainerCode     = profileData.TrainerCode;
            p.Level           = profileData.Level;
            p.TeamId          = profileData.TeamId;
            p.Gender          = profileData.Gender;
            p.FeaturedPokemon = new List <Guid>();
            p.FeaturedPokemon.Add(profileData.FeaturedPokemon1);
            p.FeaturedPokemon.Add(profileData.FeaturedPokemon2);
            p.FeaturedPokemon.Add(profileData.FeaturedPokemon3);
            p.FeaturedBadges = new List <Guid>();
            p.FeaturedBadges.Add(profileData.FeaturedBadge1);
            p.FeaturedBadges.Add(profileData.FeaturedBadge2);
            p.FeaturedBadges.Add(profileData.FeaturedBadge3);
            p.FeaturedBadges.Add(profileData.FeaturedBadge4);
            p.FeaturedBadges.Add(profileData.FeaturedBadge5);
            return(p);
        }
예제 #3
0
        public async Task <IActionResult> Katedra([FromBody] KatedraRequest req)
        {
            var response = await _busClient.RequestAsync <KatedraRequest, KatedraResponse>(req);

            _logger.LogInformation($"Katedra searched - '{req.SearchText}' - {response.Katedry.Count}");

            return(Ok(JsonConvert.SerializeObject(response)));
        }
        public async Task <AccountViewModel> CreateRecruiter([FromBody] CreateRecruiterModel bindingModel)
        {
            var account = bindingModel.CreateRecruiterModelToAccountModel();

            if (account == null || !ModelState.IsValid)
            {
                throw new CustomException(Errors.INVALID_REGISTRATION_DATA, Errors.INVALID_REGISTRATION_DATA_MSG);
            }

            account.AccountPermissions = new List <Models.AccountPermission>()
            {
                new Models.AccountPermission
                {
                    PermissionId = PermissionsList.RECRUITER_PERMISSION
                }
            };

            account = await _accountService.CreateAsync(account, bindingModel.Password);

            try
            {
                //publish a recruiter account is created message to rabbit mq bus and wait for response
                var response = await _rawRabbitBus.RequestAsync <RecruiterAccountCreated, RpcResult>(new RecruiterAccountCreated
                {
                    Id          = account.Id,
                    Email       = account.Email,
                    PhoneNumber = account.PhoneNumber,
                    FirstName   = bindingModel.FirstName,
                    LastName    = bindingModel.LastName,
                    Gender      = bindingModel.Gender,
                    Status      = account.Status
                });

                if (!response.Success)
                {
                    // account created but profile creating has an error, should be log and check
                    if (!string.IsNullOrEmpty(response.Error))
                    {
                        throw new CustomException(response.Error);
                    }
                }
            }
            catch (System.Exception)
            {
                //got unhandle exception while creating recruiter profile, should be logs and correct consistency between 2 server
                throw;
            }

            var viewModel = account.ToViewModel();

            return(viewModel);
        }
        public async Task <IActionResult> Jwt([FromBody] JwtRequest jwtrq)
        {
            var response = await _busClient.RequestAsync <LoginRequest, LoginResponse>(new LoginRequest
            {
                IdToken = jwtrq.idtoken
            });

            _logger.LogInformation(response.Success
                ? $"Successfully generated JWT '{response.Response}' for GoogleTokenId '{jwtrq.idtoken?.Substring(0, 8)}...'"
                : $"JWT could not be generated for GoogleTokenId '{jwtrq.idtoken?.Substring(0, 8)}...'");

            return(Ok(JsonConvert.SerializeObject(response)));
        }
        public async Task <string> TestEvent()
        {
            Action <IRequestConfigurationBuilder> requestBuilder = (ctx) => ctx.WithExchange(xfg => xfg.WithName("testwebapi")); //.WithRoutingKey("mymessage"));
            var response = await _client.RequestAsync <BasicMessage, BasicResponse>(new BasicMessage { Prop = "FROM FIRST" }, configuration : requestBuilder);

            return(response.Result);
        }
예제 #7
0
        public async Task <string> GetAsync(int id)
        {
            _logger.LogInformation("Requesting Value with id {valueId}", id);
            var response = await _busClient.RequestAsync <ValueRequest, ValueResponse>(new ValueRequest { Value = id });

            return(response.Value);
        }
예제 #8
0
        public async Task <IActionResult> Get()
        {
            var messageContext = new MessageContext
            {
                Source      = Request.GetDisplayUrl(),
                ExecutionId = Guid.NewGuid().ToString()
            };

            var globalExecutionId = Guid.NewGuid().ToString();

            _logger.LogInformation($"ExecutionId: {messageContext.ExecutionId}");

            var response = await _busClient.RequestAsync <HelloCommand, CommandResponse <HelloCommandResponse> >(new HelloCommand
            {
                CommandId = Guid.NewGuid()
            }, options =>
            {
                options.UseMessageContext(messageContext);
            });

            _logger.LogInformation($"Response: {JsonConvert.SerializeObject(response)}");

            await _busClient.PublishAsync(new HelloEvent
            {
                EventId = Guid.NewGuid()
            }, options =>
            {
                options.UseMessageContext(messageContext);
            });

            return(Ok());
        }
예제 #9
0
        public static void Main(string[] args)
        {
            IBusClient client = RawRabbitFactory.CreateSingleton(new RawRabbitOptions()
            {
                ClientConfiguration = ConnectionStringParser.Parse("guest:guest@localhost:5672/")
            });

//            var client = RabbitHutch.CreateBus("host=localhost;username=guest;password=guest");

            Console.Out.WriteLine($"Created client. Press enter to start.");
            Console.ReadLine();
            var memory = new List <long>();

            for (var i = 0; i < 10000; i++)
            {
                if ((i % 1000) == 0)
                {
                    Console.Out.WriteLine($"Paused at iteration: {i}. Press enter to GC.Collect() and continue.");
                    Console.ReadLine();
                    memory.Add(GC.GetTotalMemory(false));
                    GC.Collect();
                }

                var result = client.RequestAsync <ValueRequest, ValueResponse>(new ValueRequest {
                    Value = i
                }).Result;
            }

            Console.Out.WriteLine(string.Join(",", memory));
            Console.Out.WriteLine("Finished.");
            Console.ReadLine();
        }
예제 #10
0
        private async Task CreateProfile(UserCreateMessage message, MessageContext context)
        {
            // Get Pokemon
            Func <int, Task <ResultMessage> > getByPokedex = (int num) =>
                                                             _queue.RequestAsync <PokemonRequestMessage, ResultMessage>(
                new PokemonRequestMessage {
                PokedexNumber = num
            });

            var pokemonResults = (await Task.WhenAll(new Task <ResultMessage>[] {
                getByPokedex(1),
                getByPokedex(2),
                getByPokedex(3),
            })).Select(result => result.data as PokemonData).ToArray();
            var team = await _queue.RequestAsync <TeamRequestMessage, ResultMessage>(
                new TeamRequestMessage {
                Name = "Mystic",
            }
                );

            var profile = new PogoProfile
            {
                Id               = Guid.NewGuid(),
                UserAccountId    = message.Id,
                PogoUsername     = message.Username, //"anonymous",
                PogoLevel        = 1,
                PogoTrainerCode  = "0000 0000 0000",
                PogoTeamId       = (team.data as TeamData).Id,
                PlayerGender     = Gender.None,
                FeaturedPokemon1 = pokemonResults[0].Id,
                FeaturedPokemon2 = pokemonResults[1].Id,
                FeaturedPokemon3 = pokemonResults[2].Id,
                FeaturedBadge1   = Guid.Empty,
                FeaturedBadge2   = Guid.Empty,
                FeaturedBadge3   = Guid.Empty,
                FeaturedBadge4   = Guid.Empty,
                FeaturedBadge5   = Guid.Empty,
            };

            using (var scope = _scopeFactory.CreateScope())
            {
                var dbContext = scope.ServiceProvider.GetRequiredService <ProfileServiceDbContext>();
                await dbContext.AddAsync(profile);

                await dbContext.SaveChangesAsync();
            }
        }
예제 #11
0
        public void OrderListMessageTest()
        {
            OrderList orderList = new OrderList();

            orderList.RestaurantId = 1;

            var result = bus.RequestAsync <OrderList, FDP.OrderService.MessageDirectory.Response.OrderList>(orderList).Result;
        }
예제 #12
0
 public Task <string> GetAsync(int id)
 {
     _logger.LogInformation("Requesting Value with id {valueId}", id);
     return(_busClient
            .RequestAsync <ValueRequest, ValueResponse>(new ValueRequest {
         Value = id
     })
            .ContinueWith(tResponse => tResponse.Result.Value));
 }
예제 #13
0
 /// <summary>
 /// Publish a query.
 /// This is a synchronous RPC call.
 /// If no subscribers answer for a number of seconds, then a timeout exception will be thrown.
 /// </summary>
 /// <typeparam name="TQuery">The query type</typeparam>
 /// <returns>The returned value.</returns>
 public static string PublishQuery <TQuery>(this IBusClient bus, TQuery query)
     where TQuery : class, IQuery
 {
     return(bus.RequestAsync <TQuery, string>(
                query,
                configuration: config =>
     {
         config.WithExchange(exchange => exchange.WithName(QueryExchangeName));
         config.WithRoutingKey(typeof(TQuery).Name);
     })
            .Result);
 }
        public async Task <IActionResult> Load()
        {
            var response = await _busClient.RequestAsync <UserRequest, UserResponse>(new UserRequest
            {
                UserId = Guid.Parse(User.Identity.Name)
            });

            var jsonResp = JsonConvert.SerializeObject(response);

            _logger.LogInformation($"User requested - '{User.Identity.Name}' - {(response.Success ? "SUCCESS" : "FAIL")}");

            return(Ok(jsonResp));
        }
        public APIGatewayMutation(IBusClient queue, QueueHelpers helpers)
        {
            // This field allows the client to update the current user's account
            // according to the token they are using.
            FieldAsync <ProfileType>(
                "updateMe",
                // As argument is a partial Profile object, see the
                // ProfileInputType class for details
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <ProfileInputType> > {
                Name = "profile"
            }
                    ),
                resolve: async context =>
            {
                // Using the token in the context, authenticate the user and
                // get their UserId
                Guid userId = (await helpers.AuthenticateFromContext(context)).UserId;
                // Get the ProfileInputType argument as a Dictionary
                var newProfile = context.Arguments["profile"] as Dictionary <string, object>;

                // Helper function for getting a value from the argument, or
                // null if it isn't defined
                Func <string, object> getOrNull = prop => newProfile.ContainsKey(prop) ? newProfile[prop] : null;
                // Helper function for getting a Guid of the profile or null
                Func <string, Guid?> maybeGuid = field => getOrNull(field) != null
                                                    ? (Guid?)Guid.Parse(newProfile[field] as string)
                                                    : null;

                // Get the Profile ID of the account based on the UserId we
                // got earlier
                Guid id = (await helpers.GetProfileFromAccountId(userId)).Id;

                // Make a request to update the Profile with the new values.
                // Anything that is null won't be updated by the handler of
                // the message.
                var result = await queue.RequestAsync <ProfileUpdateRequestMessage, ResultMessage>(
                    new ProfileUpdateRequestMessage {
                    Id               = id,
                    PogoUsername     = getOrNull("username") as string,
                    PogoTeamId       = maybeGuid("teamId"),
                    PogoTrainerCode  = getOrNull("trainerCode") as string,
                    Gender           = getOrNull("gender") as int?,
                    PogoLevel        = getOrNull("level") as int?,
                    FeaturedPokemon1 = maybeGuid("featuredPokemon1"),
                    FeaturedPokemon2 = maybeGuid("featuredPokemon2"),
                    FeaturedPokemon3 = maybeGuid("featuredPokemon3"),
                }
                    );
                // If the response doesn't have the status Ok, the data
                // property is an exception object, so we just throw that
                if (result.status != ResultMessage.Status.Ok)
                {
                    throw (Exception)result.data;
                }

                // Get the profile again so we have the updated values and
                // return it so the client can get fields from it
                return(await helpers.GetProfileFromAccountId(userId));
            }
                );
        }
예제 #16
0
        private async Task executeLegislatura()
        {
            var response = await _busClient.RequestAsync <LegislaturaRequest, LegislaturaResponse>(new LegislaturaRequest { Message = "Requisição Hangfire" });

            Console.WriteLine(response.Message);
        }
예제 #17
0
        public APIGatewayQuery(IBusClient queue, QueueHelpers helpers)
        {
            // The 'me' field allows the client to get the details of the
            // current profile based on the token.
            FieldAsync <ProfileType>(
                "me",
                resolve: async context =>
            {
                // Authenticate the user with their token
                var userId = (await helpers.AuthenticateFromContext(context)).UserId;
                // Get the profile object based on the UserId we got from
                // the token
                var thing = await helpers.GetProfileFromAccountId(userId);
                return(thing);
            }
                );

            // Allow the client to query any profile by its ID, UserID, or username
            FieldAsync <ProfileType>(
                "profile",
                arguments: new QueryArguments(
                    new QueryArgument <StringGraphType> {
                Name = "id"
            },
                    new QueryArgument <StringGraphType> {
                Name = "useraccountid"
            },
                    new QueryArgument <StringGraphType> {
                Name = "username"
            }
                    ),
                resolve: async context => {
                ProfileRequestMessage message;
                // Depending on which argument we got, get the Profile
                if (context.HasArgument("id"))
                {
                    message = new ProfileRequestMessage {
                        Id = Guid.Parse(context.GetArgument <string>("id")),
                    };
                }
                else if (context.HasArgument("useraccountid"))
                {
                    message = new ProfileRequestMessage {
                        UserAccountId = Guid.Parse(context.GetArgument <string>("useraccountid")),
                    };
                }
                else if (context.HasArgument("username"))
                {
                    message = new ProfileRequestMessage {
                        Username = context.GetArgument <string>("username"),
                    };
                }
                else
                {
                    throw new ArgumentNullException();
                }

                var responseTask = await queue.RequestAsync <ProfileRequestMessage, ResultMessage>(message);
                var profileData  = responseTask.data as ProfileData;
                // map the ProfileData object to a Profile object
                Profile p         = new Profile();
                p.Id              = profileData.Id;
                p.Username        = profileData.Username;
                p.TrainerCode     = profileData.TrainerCode;
                p.Level           = profileData.Level;
                p.TeamId          = profileData.TeamId;
                p.Gender          = profileData.Gender;
                p.FeaturedPokemon = new List <Guid>();
                p.FeaturedPokemon.Add(profileData.FeaturedPokemon1);
                p.FeaturedPokemon.Add(profileData.FeaturedPokemon2);
                p.FeaturedPokemon.Add(profileData.FeaturedPokemon3);
                return(p);
            }
                );

            // Get a pokemon by id, name or pokedex number
            FieldAsync <PokemonType>(
                "pokemon",
                arguments: new QueryArguments(
                    new QueryArgument <StringGraphType> {
                Name = "id"
            },
                    new QueryArgument <StringGraphType> {
                Name = "name"
            },
                    new QueryArgument <IntGraphType> {
                Name = "pokedexNumber"
            }
                    ),
                resolve: async context => {
                PokemonRequestMessage message;
                // make the request message based on the argument we got
                if (context.HasArgument("id"))
                {
                    message = new PokemonRequestMessage {
                        Id = Guid.Parse(context.GetArgument <string>("id")),
                    };
                }
                else if (context.HasArgument("name"))
                {
                    message = new PokemonRequestMessage {
                        Name = context.GetArgument <string>("name"),
                    };
                }
                else if (context.HasArgument("pokedexNumber"))
                {
                    message = new PokemonRequestMessage {
                        PokedexNumber = context.GetArgument <int>("pokedexNumber"),
                    };
                }
                else
                {
                    throw new ArgumentNullException();
                }
                var responseTask = await queue.RequestAsync <PokemonRequestMessage, ResultMessage>(message);
                var pokemonData  = responseTask.data as PokemonData;
                return(new Pokemon {
                    Id = pokemonData.Id,
                    Name = pokemonData.Name,
                    PokedexNumber = pokemonData.PokedexNumber,
                    SpriteImageUrl = pokemonData.SpriteImageUrl,
                    PogoImageUrl = pokemonData.PogoImageUrl,
                });
            }
                );

            // get a team by ID
            FieldAsync <TeamType>(
                "team",
                arguments: new QueryArguments(new QueryArgument <StringGraphType> {
                Name = "id"
            }),
                resolve: async context => {
                var responseTask = await queue.RequestAsync <TeamRequestMessage, ResultMessage>(
                    new TeamRequestMessage {
                    Id = Guid.Parse(context.GetArgument <string>("id")),
                }
                    );
                var teamData = responseTask.data as TeamData;
                return(new Team {
                    Id = teamData.Id,
                    Name = teamData.Name,
                    Color = teamData.Color,
                    ImageUrl = teamData.ImageUrl,
                });
            }
                );

            // Get a badge by ID
            FieldAsync <BadgeType>(
                "badge",
                arguments: new QueryArguments(new QueryArgument <StringGraphType> {
                Name = "id"
            }),
                resolve: async context => {
                var responseTask = await queue.RequestAsync <BadgeRequestMessage, ResultMessage>(
                    new BadgeRequestMessage {
                    Id = Guid.Parse(context.GetArgument <string>("id")),
                }
                    );
                var badgeData = responseTask.data as BadgeData;
                return(new Badge {
                    Id = badgeData.Id,
                    Name = badgeData.Name,
                    ImageUrl = badgeData.ImageUrl,
                });
            }
                );


            // Get a pokemonType by ID
            FieldAsync <PokemonTypeType>(
                "pokemonType",
                arguments: new QueryArguments(new QueryArgument <StringGraphType> {
                Name = "id"
            }),
                resolve: async context => {
                var responseTask = await queue.RequestAsync <PokemonTypeRequestMessage, ResultMessage>(
                    new PokemonTypeRequestMessage {
                    Id = Guid.Parse(context.GetArgument <string>("id")),
                }
                    );
                var typeData = responseTask.data as PokemonTypeData;
                return(new PokemonTypeInfo {
                    Id = typeData.Id,
                    Name = typeData.Name,
                });
            }
                );

            // Get all badges
            FieldAsync <ListGraphType <BadgeType> >(
                "badges",
                resolve: async context => {
                var responseTask = await queue.RequestAsync <BadgesRequestMessage, ResultMessage>(
                    new BadgesRequestMessage()
                    );
                var badgeDatas = responseTask.data as List <BadgeData>;
                var badges     = badgeDatas
                                 .Select(x => new Badge {
                    Id       = x.Id,
                    Name     = x.Name,
                    ImageUrl = x.ImageUrl,
                })
                                 .ToList();

                return(badges);
            }
                );

            // get all teams
            FieldAsync <ListGraphType <TeamType> >(
                "teams",
                resolve: async context => {
                var responseTask = await queue.RequestAsync <TeamsRequestMessage, ResultMessage>(
                    new TeamsRequestMessage()
                    );
                var teamDatas = responseTask.data as List <TeamData>;
                var teams     = teamDatas
                                .Select(x => new Team {
                    Id       = x.Id,
                    Name     = x.Name,
                    Color    = x.Color,
                    ImageUrl = x.ImageUrl,
                })
                                .ToList();

                return(teams);
            }
                );

            // get all pokemon (pluralized to pokemen)
            FieldAsync <ListGraphType <PokemonType> >(
                "pokemen",
                resolve: async context => {
                var responseTask = await queue.RequestAsync <PokemenRequestMessage, ResultMessage>(
                    new PokemenRequestMessage()
                    );
                var pokemanDatas = responseTask.data as List <PokemonData>;
                var pokemans     = pokemanDatas
                                   .Select(x => new Pokemon {
                    Id             = x.Id,
                    Name           = x.Name,
                    PokedexNumber  = x.PokedexNumber,
                    SpriteImageUrl = x.SpriteImageUrl,
                    PogoImageUrl   = x.PogoImageUrl,
                })
                                   .ToList();

                return(pokemans);
            }
                );

            // Get all pokemon types
            FieldAsync <ListGraphType <PokemonTypeType> >(
                "pokemonTypes",
                resolve: async context => {
                var responseTask = await queue.RequestAsync <PokemonTypesRequestMessage, ResultMessage>(
                    new PokemonTypesRequestMessage()
                    );
                var typeDatas = responseTask.data as List <PokemonTypeData>;
                var types     = typeDatas
                                .Select(x => new PokemonTypeInfo {
                    Id   = x.Id,
                    Name = x.Name,
                })
                                .ToList();

                return(types);
            }
                );
        }
예제 #18
0
        public async Task <IActionResult> Post([FromBody] CreateUserRequest request)
        {
            var respond = await _busClient.RequestAsync <CreateUserRequest, CreateUserRespond>(request);

            return(respond.Respond);
        }
예제 #19
0
 /// <summary>
 /// 发送请求消息
 /// </summary>
 /// <typeparam name="TRequest"></typeparam>
 /// <typeparam name="TResponse"></typeparam>
 /// <param name="busClient"></param>
 /// <param name="request"></param>
 public static TResponse Request <TRequest, TResponse>(this IBusClient busClient, TRequest request)
     where TRequest : class
     where TResponse : class
 {
     return(busClient.RequestAsync <TRequest, TResponse>(request).GetAwaiter().GetResult());
 }
예제 #20
0
        public ProfileType(ContextServiceLocator ContextServiceLocator, IBusClient queue)
        {
            Name = "Profile";

            Field <StringGraphType>("id", resolve: context => context.Source.Id.ToString());
            Field(x => x.Username);
            Field(x => x.Level);
            Field(x => x.TrainerCode);
            Field(x => x.Gender);
            FieldAsync <PokemonType>(
                "featuredPokemon",
                arguments: new QueryArguments(new QueryArgument <IntGraphType> {
                Name = "n"
            }),
                resolve: async context => {
                var responseTask = await queue.RequestAsync <PokemonRequestMessage, ResultMessage>(
                    new PokemonRequestMessage {
                    Id = context.Source.FeaturedPokemon[context.GetArgument <int>("n")],
                }
                    );
                var pokemonData = responseTask.data as PokemonData;
                return(new Pokemon {
                    Id = pokemonData.Id,
                    Name = pokemonData.Name,
                    PokedexNumber = pokemonData.PokedexNumber,
                    SpriteImageUrl = pokemonData.SpriteImageUrl,
                    PogoImageUrl = pokemonData.PogoImageUrl,
                });
            }
                );
            FieldAsync <ListGraphType <PokemonType> >(
                "featuredPokemen",
                resolve: async context => {
                var responseTasks = new List <Task <ResultMessage> >();
                foreach (Guid pokemon in context.Source.FeaturedPokemon)
                {
                    responseTasks.Add(
                        queue.RequestAsync <PokemonRequestMessage, ResultMessage>(
                            new PokemonRequestMessage {
                        Id = pokemon,
                    }
                            )
                        );
                }
                var pokemen = new List <Pokemon>();
                foreach (var result in await Task.WhenAll(responseTasks))
                {
                    var data = result.data as PokemonData;
                    pokemen.Add(
                        new Pokemon {
                        Id             = data.Id,
                        Name           = data.Name,
                        PokedexNumber  = data.PokedexNumber,
                        SpriteImageUrl = data.SpriteImageUrl,
                        PogoImageUrl   = data.PogoImageUrl,
                    }
                        );
                }
                return(pokemen);
            }
                );
            FieldAsync <BadgeType>(
                "featuredBadge",
                arguments: new QueryArguments(new QueryArgument <IntGraphType> {
                Name = "n"
            }),
                resolve: async context => {
                var responseTask = await queue.RequestAsync <BadgeRequestMessage, ResultMessage>(
                    new BadgeRequestMessage {
                    Id = context.Source.FeaturedBadges[context.GetArgument <int>("n")],
                }
                    );
                var badgeData = responseTask.data as BadgeData;
                return(new Badge {
                    Id = badgeData.Id,
                    Name = badgeData.Name,
                    ImageUrl = badgeData.ImageUrl,
                });
            }
                );
            FieldAsync <ListGraphType <BadgeType> >(
                "featuredBadges",
                resolve: async context => {
                var responseTasks = new List <Task <ResultMessage> >();
                foreach (Guid badge in context.Source.FeaturedBadges)
                {
                    responseTasks.Add(
                        queue.RequestAsync <BadgeRequestMessage, ResultMessage>(
                            new BadgeRequestMessage {
                        Id = context.Source.FeaturedBadges[context.GetArgument <int>("n")],
                    }
                            )
                        );
                }
                var badges = new List <Badge>();
                foreach (var result in await Task.WhenAll(responseTasks))
                {
                    var badgeData = result.data as BadgeData;
                    badges.Add(
                        new Badge {
                        Id       = badgeData.Id,
                        Name     = badgeData.Name,
                        ImageUrl = badgeData.ImageUrl,
                    });
                }
                return(badges);
            }
                );
            Field <StringGraphType>("teamId", resolve: context => context.Source.TeamId.ToString());
            FieldAsync <TeamType>(
                "team",
                resolve: async context => {
                var responseTask = await queue.RequestAsync <TeamRequestMessage, ResultMessage>(
                    new TeamRequestMessage {
                    Id = context.Source.TeamId,
                }
                    );
                var teamData = responseTask.data as TeamData;
                return(new Team {
                    Id = teamData.Id,
                    Name = teamData.Name,
                    Color = teamData.Color,
                    ImageUrl = teamData.ImageUrl,
                });
            }
                );
        }