public Task HandleAsync(TeamStubUpdatedEvent @event, CancellationToken cancellationToken)
        {
            _cache.Remove(_cacheKey.FindTeamStub
                          (
                              @event.TeamId,
                              @event.StubId
                          ));

            return(Task.CompletedTask);
        }
        public async Task <FindTeamStubProjection> HandleAsync(FindTeamStubQuery query,
                                                               CancellationToken cancellationToken)
        {
            if (_authenticatedUserAccessor.AuthenticatedUser.Teams.All(t => t.Id != query.TeamId))
            {
                throw new UserNotAddedToTeamException
                      (
                          _authenticatedUserAccessor.AuthenticatedUser.Id,
                          query.TeamId
                      );
            }

            var stub = await _cache.GetOrSetAsync
                       (
                _cacheKey.FindTeamStub(query.TeamId, query.StubId),
                async() => await _stubsCollection.Find(s => s.TeamId == query.TeamId && s.Id == query.StubId)
                .Project(s => new FindTeamStubProjection
                         (
                             s.Id.ToString(),
                             s.TeamId.ToString(),
                             s.Name,
                             new Request
                             (
                                 s.Request.HttpMethod,
                                 s.Request.Path,
                                 s.Request.QueryStringParameters.Select(qsp => new QueryStringParamter(qsp.Key, qsp.Value))
                                 .ToList(),
                                 s.Request.BodyTokens.Select(bt => new BodyToken(bt.Path, bt.Type, bt.Value)).ToList(),
                                 s.Request.Headers.Select(h => new Header(h.Key, h.Value)).ToList()
                             ),
                             new Response
                             (
                                 s.Response.HttpStatusCode,
                                 s.Response.Body,
                                 s.Response.Headers.Select(h => new Header(h.Key, h.Value)).ToList()
                             ),
                             s.Tags
                         ))
                .SingleOrDefaultAsync(cancellationToken)
                       );

            if (stub == null)
            {
                throw new StubNotFoundException
                      (
                          query.StubId,
                          query.TeamId
                      );
            }

            return(stub);
        }