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

            var log = await _cache.GetOrSetAsync
                      (
                _cacheKey.FindTeamLog(query.TeamId, query.LogId),
                async() => await _logsCollection.Find(l => l.TeamId == query.TeamId && l.Id == query.LogId)
                .Project(l => new FindTeamLogProjection
                         (
                             l.Id.ToString(),
                             l.TeamId.ToString(),
                             l.StubIds.Select(sId => sId.ToString()).ToList(),
                             new RequestLog
                             (
                                 l.Request.HttpMethod,
                                 l.Request.Path,
                                 l.Request.QueryStringParameters.Select(qsp => new QueryStringParameter(qsp.Key, qsp.Value))
                                 .ToList(),
                                 l.Request.Body,
                                 l.Request.Headers.Select(qsp => new Header(qsp.Key, qsp.Value)).ToList()
                             ),
                             new ResponseLog
                             (
                                 l.Response.HttpStatusCode,
                                 l.Response.Body,
                                 l.Response.Headers.Select(qsp => new Header(qsp.Key, qsp.Value)).ToList()
                             ),
                             l.Id.CreationTime
                         ))
                .SingleOrDefaultAsync(cancellationToken)
                      );

            if (log == null)
            {
                throw new LogNotFoundException
                      (
                          query.LogId,
                          query.TeamId
                      );
            }

            return(log);
        }