Ключевой функционал в отдельном классе и пара обработчиков задач: митинг и учет времени
This commit is contained in:
@@ -0,0 +1,72 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using JiraTimeBotForm.Configuration;
|
||||||
|
using JiraTimeBotForm.TaskProcessors;
|
||||||
|
using JiraTimeBotForm.TaskTime;
|
||||||
|
|
||||||
|
namespace JiraTimeBotForm
|
||||||
|
{
|
||||||
|
class Job
|
||||||
|
{
|
||||||
|
private readonly ILog _log;
|
||||||
|
|
||||||
|
public Job(ILog log)
|
||||||
|
{
|
||||||
|
_log = log;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task DoTheJob(Settings settings, ITasksProcessor tasksProcessor, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
_log.Info("Начинаем работу");
|
||||||
|
|
||||||
|
return Task.Run(() => DoTheJobImpl(settings, tasksProcessor, cancellationToken), cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DoTheJobImpl(Settings settings, ITasksProcessor tasksProcessor, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var taskDiscoverer = new TaskTimeDiscoverer(_log);
|
||||||
|
|
||||||
|
int daysDiff = 0;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
DateTime date = DateTime.Now.Date.AddDays(daysDiff);
|
||||||
|
|
||||||
|
List<TaskTimeItem> taskTimes = taskDiscoverer.GetTaskTimes(settings, date, cancellationToken);
|
||||||
|
|
||||||
|
if (cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!taskTimes.Any())
|
||||||
|
{
|
||||||
|
_log.Warn($"{date:dd.MM.yyyy} вы не сделали ничего полезного =) Использую предыдущий день.");
|
||||||
|
daysDiff--;
|
||||||
|
if (daysDiff < -7)
|
||||||
|
{
|
||||||
|
_log.Error("Не нашли ни одного коммита за предыдущие 7 дней. Возможно вы в отпуске? Выхожу.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
_log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:");
|
||||||
|
foreach (var taskTime in taskTimes)
|
||||||
|
{
|
||||||
|
_log.Trace($"- {taskTime.Branch} (коммитов {taskTime.Commits}): {taskTime.Time}");
|
||||||
|
}
|
||||||
|
|
||||||
|
tasksProcessor.Process(date, taskTimes, settings);
|
||||||
|
|
||||||
|
_log.Info("Готово.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using JiraTimeBotForm.Configuration;
|
||||||
|
using JiraTimeBotForm.TaskTime;
|
||||||
|
|
||||||
|
namespace JiraTimeBotForm.TaskProcessors
|
||||||
|
{
|
||||||
|
interface ITasksProcessor
|
||||||
|
{
|
||||||
|
void Process(DateTime date, List<TaskTimeItem> taskTimes, Settings settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using JiraTimeBotForm.Configuration;
|
||||||
|
using JiraTimeBotForm.JiraIntegration;
|
||||||
|
using JiraTimeBotForm.TaskProcessors;
|
||||||
|
using JiraTimeBotForm.TaskTime;
|
||||||
|
|
||||||
|
namespace JiraTimeBotForm.TasksProcessors
|
||||||
|
{
|
||||||
|
class MeetingProcessor : ITasksProcessor
|
||||||
|
{
|
||||||
|
private readonly ILog _log;
|
||||||
|
|
||||||
|
public MeetingProcessor(ILog log)
|
||||||
|
{
|
||||||
|
_log = log;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Process(DateTime date, List<TaskTimeItem> taskTimes, Settings settings)
|
||||||
|
{
|
||||||
|
var jira = new JiraApi(settings, _log);
|
||||||
|
|
||||||
|
_log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:");
|
||||||
|
|
||||||
|
foreach (var taskTime in taskTimes.OrderByDescending(f => f.Time))
|
||||||
|
{
|
||||||
|
var taskName = jira.GetTaskName(taskTime.Branch);
|
||||||
|
_log.Trace($" - [{taskTime.Branch}, коммитов {taskTime.Commits}]: {taskName} - {taskTime.Time}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using JiraTimeBotForm.Configuration;
|
||||||
|
using JiraTimeBotForm.JiraIntegration;
|
||||||
|
using JiraTimeBotForm.TaskProcessors;
|
||||||
|
using JiraTimeBotForm.TaskTime;
|
||||||
|
|
||||||
|
namespace JiraTimeBotForm.TasksProcessors
|
||||||
|
{
|
||||||
|
class WorkLogTasksProcessor : ITasksProcessor
|
||||||
|
{
|
||||||
|
private readonly ILog _log;
|
||||||
|
|
||||||
|
public WorkLogTasksProcessor(ILog log)
|
||||||
|
{
|
||||||
|
_log = log;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Process(DateTime date, List<TaskTimeItem> taskTimes, Settings settings)
|
||||||
|
{
|
||||||
|
_log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:");
|
||||||
|
foreach (var taskTime in taskTimes)
|
||||||
|
{
|
||||||
|
_log.Trace($"- {taskTime.Branch} (коммитов {taskTime.Commits}): {taskTime.Time}");
|
||||||
|
}
|
||||||
|
|
||||||
|
var jira = new JiraApi(settings, _log);
|
||||||
|
jira.SetTodayWorklog(taskTimes, dummy: settings.DummyMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user