Ключевой функционал в отдельном классе и пара обработчиков задач: митинг и учет времени

This commit is contained in:
Alex Tri
2019-03-14 12:18:32 +03:00
parent 234871ceb0
commit f2f703972c
4 changed files with 148 additions and 0 deletions
+72
View File
@@ -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);
}
}
}