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); }
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); }
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); }