Дополнен алгоритм работы с JIRA-задачами

This commit is contained in:
Danil Kislov
2019-03-20 09:23:28 +03:00
parent 5227897010
commit 6bc2627c1b
2 changed files with 46 additions and 10 deletions
+2 -3
View File
@@ -34,14 +34,13 @@ namespace JiraTimeBot.JiraIntegration
} }
} }
public List<Issue> GetTodayIssues(Settings settings, DateTime? date = null, CancellationToken cancellationToken = default(CancellationToken)) public List<Issue> GetIssuesByJQL(string jql, Settings settings, DateTime? date = null, CancellationToken cancellationToken = default(CancellationToken))
{ {
var jira = Jira.CreateRestClient(settings.JiraUrl, settings.JiraUserName, settings.JiraPassword); var jira = Jira.CreateRestClient(settings.JiraUrl, settings.JiraUserName, settings.JiraPassword);
date = date.GetValueOrDefault(DateTime.Now.Date); date = date.GetValueOrDefault(DateTime.Now.Date);
var userName = settings.JiraUserName; var userName = settings.JiraUserName;
var jql = settings.JiraQuery;
if (string.IsNullOrEmpty(jql)) if (string.IsNullOrEmpty(jql))
{ {
jql = $"status changed by '%USER%' during (\"%DATE%\",\"%DATE%\")"; jql = $"status changed by '%USER%' during (\"%DATE%\",\"%DATE%\")";
@@ -53,7 +52,7 @@ namespace JiraTimeBot.JiraIntegration
try try
{ {
List<Issue> affectedIssues = List<Issue> affectedIssues =
jira.Issues.GetIssuesFromJqlAsync(jql, 50, 0, cancellationToken).Result.ToList(); jira.Issues.GetIssuesFromJqlAsync(jql, 100, 0, cancellationToken).Result.ToList();
return affectedIssues; return affectedIssues;
} }
catch (Exception ex) catch (Exception ex)
@@ -1,6 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading; using System.Threading;
using Atlassian.Jira;
using JiraTimeBot.Configuration; using JiraTimeBot.Configuration;
using JiraTimeBot.Mercurial; using JiraTimeBot.Mercurial;
using JiraTimeBot.Mercurial.Objects; using JiraTimeBot.Mercurial.Objects;
@@ -24,17 +26,52 @@ namespace JiraTimeBot.JiraIntegration
{ {
date = date.GetValueOrDefault(DateTime.Now.Date); date = date.GetValueOrDefault(DateTime.Now.Date);
var workTasks = new List<MercurialCommitItem>(); var workTasks = new List<MercurialCommitItem>();
var issues = _jiraApi.GetTodayIssues(settings, date, cancellationToken); var issues = _jiraApi.GetIssuesByJQL(settings.JiraQuery, settings, date, cancellationToken);
foreach (var issue in issues) foreach (var issue in issues)
{ {
workTasks.Add(new MercurialCommitItem if (cancellationToken.IsCancellationRequested)
{ {
Description = issue.Summary, return new List<MercurialCommitItem>();
Time = issue.Updated.GetValueOrDefault(date.Value), }
Branch = issue.Key.Value,
FilesAffected = 1 List<Comment> comments = new List<Comment>();
}); if (issue.Type?.Name != "Дубликат")
{
_log.Trace($"Получаю комментарии по задаче {issue.Key} ({issue.Type?.Name}).");
comments = issue.GetCommentsAsync(cancellationToken).Result?.ToList() ?? new List<Comment>();
}
else
{
_log.Trace($"Пропускаю комментарии по задаче {issue.Key} ({issue.Type?.Name}).");
}
var user = settings.JiraUserName;
var userComments = comments.Where(f => f.Author.Equals(user, StringComparison.InvariantCultureIgnoreCase)).ToList();
if (userComments.Any())
{
foreach (var comment in userComments)
{
workTasks.Add(new MercurialCommitItem
{
Description = issue.Summary,
Time = issue.Updated.GetValueOrDefault(date.Value),
Branch = issue.Key.Value,
FilesAffected = 1
});
}
}
else
{
workTasks.Add(new MercurialCommitItem
{
Description = issue.Summary,
Time = issue.Updated.GetValueOrDefault(date.Value),
Branch = issue.Key.Value,
FilesAffected = 1
});
}
} }
return workTasks; return workTasks;