-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAzureDevopsStateTrackerService.cs
More file actions
129 lines (108 loc) · 5.46 KB
/
AzureDevopsStateTrackerService.cs
File metadata and controls
129 lines (108 loc) · 5.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using AzureDevopsStateTracker.DTOs;
using AzureDevopsStateTracker.DTOs.Create;
using AzureDevopsStateTracker.DTOs.Update;
using AzureDevopsStateTracker.Entities;
using AzureDevopsStateTracker.Extensions;
using AzureDevopsStateTracker.Interfaces;
using AzureDevopsStateTracker.Interfaces.Internals;
using System;
using System.Linq;
namespace AzureDevopsStateTracker.Services
{
public class AzureDevopsStateTrackerService : IAzureDevopsStateTrackerService
{
public readonly IWorkItemRepository _workItemRepository;
public readonly IWorkItemAdapter _workItemAdapter;
public AzureDevopsStateTrackerService(
IWorkItemAdapter workItemAdapter, IWorkItemRepository workItemRepository)
{
_workItemAdapter = workItemAdapter;
_workItemRepository = workItemRepository;
}
public void Create(CreateWorkItemDTO create)
{
var workItem = new WorkItem(create.Resource.Id);
workItem.Update(create.Resource.Fields.Title,
create.Resource.Fields.TeamProject,
create.Resource.Fields.AreaPath,
create.Resource.Fields.IterationPath,
create.Resource.Fields.Type,
create.Resource.Fields.CreatedBy.ExtractEmail(),
create.Resource.Fields.AssignedTo.ExtractEmail(),
create.Resource.Fields.Tags,
create.Resource.Fields.Parent,
create.Resource.Fields.Effort,
create.Resource.Fields.StoryPoints,
create.Resource.Fields.OriginalEstimate,
create.Resource.Fields.Activity);
AddWorkItemChange(workItem, create);
_workItemRepository.Add(workItem);
_workItemRepository.SaveChanges();
}
public void Update(UpdatedWorkItemDTO update)
{
var workItem = _workItemRepository.GetByWorkItemId(update.Resource.WorkItemId);
if (workItem is null)
return;
workItem.Update(update.Resource.Revision.Fields.Title,
update.Resource.Revision.Fields.TeamProject,
update.Resource.Revision.Fields.AreaPath,
update.Resource.Revision.Fields.IterationPath,
update.Resource.Revision.Fields.Type,
update.Resource.Revision.Fields.CreatedBy.ExtractEmail(),
update.Resource.Revision.Fields.AssignedTo.ExtractEmail(),
update.Resource.Revision.Fields.Tags,
update.Resource.Revision.Fields.Parent,
update.Resource.Revision.Fields.Effort,
update.Resource.Revision.Fields.StoryPoints,
update.Resource.Revision.Fields.OriginalEstimate,
update.Resource.Revision.Fields.Activity);
AddWorkItemChange(workItem, update);
_workItemRepository.Update(workItem);
_workItemRepository.SaveChanges();
}
public WorkItemDTO GetByWorkItemId(string workItemId)
{
var workItem = _workItemRepository.GetByWorkItemId(workItemId);
if (workItem is null)
return null;
return _workItemAdapter.ToWorkItemDTO(workItem);
}
#region Support Methods
public WorkItemChange ToWorkItemChange(string workItemId, string changedBy, DateTime newDate, string newState, string oldState = null, DateTime? oldDate = null)
{
return new WorkItemChange(workItemId, changedBy.ExtractEmail(), newDate, newState, oldState, oldDate);
}
public void AddWorkItemChange(WorkItem workItem, CreateWorkItemDTO create)
{
var workItemChange = ToWorkItemChange(workItem.Id,
create.Resource.Fields.ChangedBy,
create.Resource.Fields.CreatedDate,
create.Resource.Fields.State);
workItem.AddWorkItemChange(workItemChange);
}
public void AddWorkItemChange(WorkItem workItem, UpdatedWorkItemDTO update)
{
var changedBy = update.Resource.Revision.Fields.ChangedBy ?? update.Resource.Fields.ChangedBy.NewValue;
var workItemChange = ToWorkItemChange(workItem.Id,
changedBy,
update.Resource.Fields.StateChangeDate.NewValue,
update.Resource.Fields.State.NewValue,
update.Resource.Fields.State.OldValue,
update.Resource.Fields.StateChangeDate.OldValue);
workItem.AddWorkItemChange(workItemChange);
UpdateTimeByStates(workItem);
}
public void UpdateTimeByStates(WorkItem workItem)
{
RemoveTimeByStateFromDataBase(workItem);
workItem.ClearTimesByState();
workItem.AddTimesByState(workItem.CalculateTotalTimeByState());
}
public void RemoveTimeByStateFromDataBase(WorkItem workItem)
{
_workItemRepository.RemoveAllTimeByState(workItem.TimeByStates.ToList());
}
#endregion
}
}