public async Task <HttpResponseMessage> Update(HttpRequestMessage request, [FromBody] CandidateInputDTO value)
        {
            try
            {
                var userId = ContextParser.GetUserId(request.GetRequestContext());

                var candidate = Mapper.Map <CandidateInputDTO, Candidate>(value);

                candidate.LastModifier = userId;

                var events = await eventService.RegisterCandidateUpdate(candidate, userId);

                var updatedCandidate = await candidateService.Update(candidate, value.VacanciesIds)
                                       .ConfigureAwait(false);

                unitOfWork.Save();

                var candidateElasticModel = Mapper.Map <Candidate, CandidateElasticModel>(updatedCandidate);
                await candidateElasticService.UpdateCandidateElastic(candidateElasticModel);

                var notification = await notificationService.CreateNotification(updatedCandidate.HRM,
                                                                                NotificationTypes.Update, events);

                if (NotificationsHub.IsConnected(updatedCandidate.HRM))
                {
                    await NotificationsHub.PushNotification(notification);
                }

                unitOfWork.Save();

                return(request.CreateResponse(HttpStatusCode.OK));
            }
            catch (Exception ex)
            {
                logger.Error(ex, JsonConvert.SerializeObject(value));

                return(request.CreateResponse(HttpStatusCode.InternalServerError));
            }
        }
        public async Task <HttpResponseMessage> AddCandidate(HttpRequestMessage request, [FromBody] CandidateInputDTO value)
        {
            try
            {
                var userId = ContextParser.GetUserId(request.GetRequestContext());

                var candidate = Mapper.Map <CandidateInputDTO, Candidate>(value);

                candidate.HRM = userId;

                candidate.LastModifier = userId;

                var createdCandidate = await candidateService.Add(candidate, value.VacanciesIds)
                                       .ConfigureAwait(false);

                await eventService.RegisterCandidate(createdCandidate, userId);

                unitOfWork.Save();

                var candidateElastic = Mapper.Map <Candidate, CandidateElasticModel>(createdCandidate);
                await candidateElasticService.AddCandidateElastic(candidateElastic).ConfigureAwait(false);

                return(request.CreateResponse(HttpStatusCode.OK, createdCandidate.Id));
            }
            catch (Exception ex)
            {
                logger.Error(ex, JsonConvert.SerializeObject(value));

                return(request.CreateResponse(HttpStatusCode.InternalServerError));
            }
        }