コード例 #1
0
        public void DeleteWorkItemInIssue(ClockifyYouTrackAssociation association, ClockifyWebhookModel clockifyWebhook)
        {
            // Ищем от какого пользователя идет запрос, некая аутентификация и авторизация.
            var user = association.users.FirstOrDefault(u => u.clockifyUserId == clockifyWebhook.userId);

            if (user == null)
            {
                return;
            }

            // Создаем подключение к YouTrack.
            var connection = new BearerTokenConnection(association.domain, association.permToken);

            // Берем issueId из описания вебхука или берем
            // запасной issueId (пользовательский или основной).
            var issueId = GetIssueIdFromDescriptionOrDefaultIssueId(connection, clockifyWebhook, association, user);

            // Если найти issueId не удалось, завершаем метод -
            // мы не знаем где удалять отметку времени.
            if (string.IsNullOrEmpty(issueId))
            {
                return;
            }

            // Получаем отметку времени из YouTrack, еслии ее нет, завершаем метод - удалять нечего.
            var workItem = GetWorkItemFromIssue(connection, issueId, clockifyWebhook);

            if (workItem == null)
            {
                return;
            }

            // Удаляем отметку времени в YouTrack.
            DeleteWorkItemForIssue(connection, issueId, workItem.Id);
        }
コード例 #2
0
        private string GetIssueIdFromDescriptionOrDefaultIssueId(BearerTokenConnection connection,
                                                                 ClockifyWebhookModel clockifyWebhook, ClockifyYouTrackAssociation association, User user)
        {
            // Выделяем issueId из описания вебхука,
            // если в переданном нам YouTrack он есть - возвращаем его,
            // иначе смотрим на defaultIssueId.
            var issueId = GetYouTrackIssueId(clockifyWebhook.description);

            if (IsIssueExists(connection, issueId))
            {
                return(issueId);
            }

            // Смотрим defaultIssueId.
            if (!string.IsNullOrEmpty(user.defaultIssueId))
            {
                return(user.defaultIssueId);
            }
            if (!string.IsNullOrEmpty(association.defaultIssueId))
            {
                return(association.defaultIssueId);
            }

            // Если ничего не нашли возвращаем null.
            return(null);
        }
コード例 #3
0
        public void CreateWorkItemInIssue(ClockifyYouTrackAssociation association, ClockifyWebhookModel clockifyWebhook)
        {
            // Ищем от какого пользователя идет запрос, некая аутентификация и авторизация.
            var user = association.users.FirstOrDefault(u => u.clockifyUserId == clockifyWebhook.userId);

            if (user == null)
            {
                return;
            }

            // Создаем подключение к YouTrack.
            var connection = new BearerTokenConnection(association.domain, association.permToken);

            // Берем issueId из описания вебхука или берем
            // запасной issueId (пользовательский или основной).
            var issueId = GetIssueIdFromDescriptionOrDefaultIssueId(connection, clockifyWebhook, association, user);

            // Если найти issueId не удалось, завершаем метод -
            // мы не знаем куда добавлять отметку времени.
            if (string.IsNullOrEmpty(issueId))
            {
                return;
            }

            // Создаем отметку времени, которая будет отправлена в YouTrack.
            var workItem = CreateWorkItem(clockifyWebhook, user);

            // Отправляем отметку времени в конкретный issue в конкретном YouTrack.
            CreateWorkItemForIssue(connection, issueId, workItem);
        }
コード例 #4
0
 private void UpdateWorkItem(WorkItem workItem, ClockifyWebhookModel clockifyWebhook)
 {
     // При обновлении отметки времени в clockify
     // могут меняться и ее описание, и ее продолжительность.
     // Автор отметки времени не меняется.
     workItem.Description = $"{clockifyWebhook.description}\n{clockifyWebhook.id}";
     workItem.Duration    = GetDuration(clockifyWebhook.timeInterval);
 }
        public void DeleteTask(ClockifyWebhookModel webhook)
        {
            var association = _associationsManager.GetAssociation(webhook.workspaceId);

            if (association != null)
            {
                _youTrackService.DeleteWorkItemInIssue(association, webhook);
            }
        }
コード例 #6
0
        private WorkItem GetWorkItemFromIssue(BearerTokenConnection connection, string issueId,
                                              ClockifyWebhookModel clockifyWebhook)
        {
            var timeTrackingService = connection.CreateTimeTrackingService();
            var workItems           = timeTrackingService.GetWorkItemsForIssue(issueId).Result.ToList();
            var workItem            = workItems.FirstOrDefault(item => IsTimeStampIdExists(item.Description, clockifyWebhook.id));

            return(workItem);
        }
コード例 #7
0
        private WorkItem CreateWorkItem(ClockifyWebhookModel clockifyWebhook, User user)
        {
            // Задаем текущую дату и время.
            var dateTime = DateTime.Now;
            var duration = GetDuration(clockifyWebhook.timeInterval);
            // Описание отметки времени включает в себя описание и id отметки времени в clockify.
            var description = $"{clockifyWebhook.description}\n{clockifyWebhook.id}";
            var author      = new Author {
                Login = user.youTrackUserLogin
            };

            return(new WorkItem(dateTime, duration, description, null, author));
        }