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

                var vacancy = Mapper.Map <VacancyInputDTO, Vacancy>(value);

                var createdVacancy = await vacancyService.Post(vacancy, value.Candidates, userId)
                                     .ConfigureAwait(false);

                await eventService.RegisterVacancy(createdVacancy, userId);

                unitOfWork.Save();

                var elasticVacancy = Mapper.Map <Vacancy, VacancyElasticModel>(createdVacancy);
                await vacancyElasticService.AddVacancyElastic(elasticVacancy);

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

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

                var vacancy = Mapper.Map <VacancyInputDTO, Vacancy>(value);

                var e = await eventService.RegisterVacancyUpdate(vacancy, userId);

                var updatedVacancy = await vacancyService.Update(vacancy, value.Candidates, userId)
                                     .ConfigureAwait(false);

                unitOfWork.Save();

                var elasticVacancy = Mapper.Map <Vacancy, VacancyElasticModel>(updatedVacancy);
                await vacancyElasticService.UpdateVacancyElastic(elasticVacancy);

                var notification = await notificationService.CreateNotification(updatedVacancy.HRM,
                                                                                NotificationTypes.Update, e);

                if (NotificationsHub.IsConnected(updatedVacancy.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));
            }
        }