示例#1
0
        public async Task <IMessageActivity> LeaveInternalCommentAsync(
            ITurnContext turnContext,
            CancellationToken cancellationToken)
        {
            var commandData = JsonConvert.DeserializeObject <LeaveCommentCommand>(turnContext.Activity.Value?.ToString());

            if (commandData is null)
            {
                return(null);
            }

            await _candidateService.AddComment(commandData, turnContext.Activity.From.Name, cancellationToken);

            var candidate = await _candidateService.GetById(commandData.CandidateId, cancellationToken);

            var interviewers = await _recruiterService.GetAllInterviewers(cancellationToken);

            var templateModel = new CandidateTemplateModel
            {
                Items = new List <Candidate> {
                    candidate
                },
                Interviewers = interviewers,
                AppSettings  = _appSettings,
                NoItemsLabel = "You don't have such candidate."
            };

            var messageActivity = await _candidatesTemplate.RenderTemplate(turnContext, null, TemplateConstants.CandidateAsAdaptiveCardWithMultipleItems, templateModel);

            return(messageActivity);
        }
示例#2
0
        public async Task NotifyRecruiterAboutCandidateStageChange(
            Candidate candidate,
            CancellationToken cancellationToken = default)
        {
            if (candidate?.Position != null)
            {
                var recruiter = await _recruiterService.GetById(candidate.Position.HiringManagerId, cancellationToken);

                if (recruiter?.ConversationData is null)
                {
                    return;
                }

                var interviewers = await _recruiterService.GetAllInterviewers(cancellationToken);

                var templateModel = new CandidateTemplateModel
                {
                    Items = new List <Candidate> {
                        candidate
                    },
                    Interviewers = interviewers,
                    AppSettings  = _appSettings
                };

                var attachments = (await _candidatesTemplate.RenderTemplate(null, null, TemplateConstants.CandidateAsAdaptiveCardWithMultipleItems, templateModel)).Attachments;

                await SendToConversation($"Candidate stage has been changed for {candidate.Name} from {candidate.PreviousStage} to {candidate.Stage}", attachments, recruiter.ConversationData, cancellationToken);
            }
        }
示例#3
0
        public async Task <InvokeResponse> HandleMessagingExtensionQueryAsync(
            ITurnContext turnContext,
            MessagingExtensionQuery query,
            CancellationToken cancellationToken)
        {
            var initialRunParameter = GetQueryParameterByName(query, "initialRun");

            // situation where the incoming payload was received from the config popup
            if (!string.IsNullOrEmpty(query.State))
            {
                initialRunParameter = bool.TrueString;
            }

            var isInitialRun = string.Equals(initialRunParameter, bool.TrueString, StringComparison.OrdinalIgnoreCase);
            var maxResults   = isInitialRun ? 5 : query.QueryOptions.Count ?? 25;

            var attachments = new List <MessagingExtensionAttachment>();
            var searchText  = GetQueryParameterByName(query, MessagingExtensionCommands.SearchTextParameterName);

            switch (query.CommandId)
            {
            case MessagingExtensionCommands.SearchPositions:
                var positions = await _positionService.Search(searchText, maxResults, cancellationToken);

                foreach (var position in positions)
                {
                    var positionsTemplate = new PositionTemplateModel
                    {
                        Items = new List <Position> {
                            position
                        },
                    };

                    var mainCard = await _positionsTemplate.RenderTemplate(turnContext, null, TemplateConstants.PositionAsAdaptiveCardWithMultipleItems, positionsTemplate);

                    var previewCard = await _positionsTemplate.RenderTemplate(turnContext, null, TemplateConstants.PositionAsThumbnailCardWithMultipleItems, positionsTemplate);

                    attachments.Add(mainCard.Attachments.First().ToMessagingExtensionAttachment(previewCard.Attachments.First()));
                }

                break;

            case MessagingExtensionCommands.SearchCandidates:
                var candidates = await _candidateService.Search(searchText, maxResults, cancellationToken);

                var interviewers = await _recruiterService.GetAllInterviewers(cancellationToken);

                foreach (var candidate in candidates)
                {
                    var templateModel = new CandidateTemplateModel
                    {
                        Items = new List <Candidate> {
                            candidate
                        },
                        Interviewers = interviewers,
                        AppSettings  = _appSettings,
                    };

                    var mainCard = await _candidatesTemplate.RenderTemplate(turnContext, null, TemplateConstants.CandidateAsAdaptiveCardWithMultipleItems, templateModel);

                    var previewCard = await _candidatesTemplate.RenderTemplate(turnContext, null, TemplateConstants.CandidateAsThumbnailCardWithMultipleItems, templateModel);

                    attachments.Add(mainCard.Attachments.First().ToMessagingExtensionAttachment(previewCard.Attachments.First()));
                }

                break;
            }

            return(_mapper.Map <MessagingExtensionAttachment[], InvokeResponse>(attachments.ToArray()));
        }