Ejemplo n.º 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);
        }
Ejemplo n.º 2
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);
        }
        public bool AddAssociation(string userId, string workspaceId, string domain, string permToken)
        {
            if (_associations.FirstOrDefault(a => a.workspaceId == workspaceId) != null)
            {
                return(false);
            }

            var association = new ClockifyYouTrackAssociation(userId, workspaceId, domain, permToken);

            _associations.Add(association);
            File.WriteAllText(JsonPath, JsonSerializer.Serialize(_associations));

            return(true);
        }
Ejemplo n.º 4
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);
        }