public async Task <Result <SurveyModel, Error> > Handle(CreateSurveyCommand request,
                                                            CancellationToken cancellationToken)
    {
        try
        {
            var userInfo = await _userService.GetUserInfo(cancellationToken);

            var surveyOwner =
                await _surveyContext.Users.FirstAsync(user => user.ExternalUserId == userInfo.Id,
                                                      cancellationToken);

            var survey = new Survey(surveyOwner, NonEmptyString.Create(request.SurveyTopic),
                                    request.NumberOfRespondents, NonEmptyString.Create(request.RespondentType));

            survey.AddSurveyOptions(request.SurveyOptions.Select(option =>
                                                                 new SurveyOption(NonEmptyString.Create(option.OptionText), option.PreferredNumberOfVotes)));

            survey.CalculateOutcome();

            await _surveyContext.Surveys.AddAsync(survey, cancellationToken);

            await _surveyContext.SaveChangesAsync(cancellationToken);

            return(_mapper.Map <SurveyModel>(survey));
        }
        catch (SurveyDomainException e)
        {
            return(new Error("survey.domain.exception", e.Message));
        }
    }