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