Skip to content

Commit f761d5f

Browse files
committed
Updating
1 parent 631642a commit f761d5f

26 files changed

+1489
-6
lines changed

AzureDevOpsStateTracker.Functions/AzureDevOpsStateTracker.Functions.sln

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ VisualStudioVersion = 16.0.31229.75
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureDevOpsStateTracker.Functions", "AzureDevOpsStateTracker.Functions.csproj", "{3C86C085-C8C6-46BB-8315-D4348928034C}"
77
EndProject
8-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureDevopsStateTracker", "..\..\azure-devops-state-tracker\AzureDevopsStateTracker\AzureDevopsStateTracker.csproj", "{E71EE8C3-7D74-4C91-B244-2394160F7486}"
9-
EndProject
108
Global
119
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1210
Debug|Any CPU = Debug|Any CPU
@@ -17,10 +15,6 @@ Global
1715
{3C86C085-C8C6-46BB-8315-D4348928034C}.Debug|Any CPU.Build.0 = Debug|Any CPU
1816
{3C86C085-C8C6-46BB-8315-D4348928034C}.Release|Any CPU.ActiveCfg = Release|Any CPU
1917
{3C86C085-C8C6-46BB-8315-D4348928034C}.Release|Any CPU.Build.0 = Release|Any CPU
20-
{E71EE8C3-7D74-4C91-B244-2394160F7486}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21-
{E71EE8C3-7D74-4C91-B244-2394160F7486}.Debug|Any CPU.Build.0 = Debug|Any CPU
22-
{E71EE8C3-7D74-4C91-B244-2394160F7486}.Release|Any CPU.ActiveCfg = Release|Any CPU
23-
{E71EE8C3-7D74-4C91-B244-2394160F7486}.Release|Any CPU.Build.0 = Release|Any CPU
2418
EndGlobalSection
2519
GlobalSection(SolutionProperties) = preSolution
2620
HideSolutionNode = FALSE
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
using AzureDevopsStateTracker.DTOs;
2+
using AzureDevopsStateTracker.Entities;
3+
using AzureDevopsStateTracker.Interfaces;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
7+
namespace AzureDevopsStateTracker.Adapters
8+
{
9+
internal class WorkItemAdapter : IWorkItemAdapter
10+
{
11+
public WorkItemDTO ToWorkItemDTO(WorkItem workItem)
12+
{
13+
if (workItem == null) return null;
14+
15+
return new WorkItemDTO()
16+
{
17+
Id = workItem.Id,
18+
CreatedAt = workItem.CreatedAt,
19+
AssignedTo = workItem.AssignedTo,
20+
CreatedBy = workItem.CreatedBy,
21+
CurrentStatus = workItem.CurrentStatus,
22+
TeamProject = workItem.TeamProject,
23+
AreaPath = workItem.AreaPath,
24+
IterationPath = workItem.IterationPath,
25+
Title = workItem.Title,
26+
Type = workItem.Type,
27+
Effort = workItem.Effort,
28+
StoryPoints = workItem.StoryPoints,
29+
OriginalEstimate = workItem.OriginalEstimate,
30+
WorkItemParentId = workItem.WorkItemParentId,
31+
Activity = workItem.Activity,
32+
Tags = workItem.Tags == null ? new List<string>() : workItem.Tags.Split(';').ToList(),
33+
WorkItemsChangesDTO = ToWorkItemsChangeDTO(workItem.WorkItemsChanges.OrderBy(x => x.CreatedAt).ToList()),
34+
TimesByStateDTO = ToTimeByStatesDTO(workItem.CalculateTotalTimeByState().ToList()),
35+
};
36+
}
37+
38+
public List<WorkItemDTO> ToWorkItemsDTO(List<WorkItem> workItems)
39+
{
40+
var workItemsDTO = new List<WorkItemDTO>();
41+
42+
if (workItems == null) return workItemsDTO;
43+
44+
workItems.ForEach(
45+
workItem =>
46+
workItemsDTO.Add(ToWorkItemDTO(workItem)));
47+
48+
return workItemsDTO
49+
.ToList();
50+
}
51+
52+
public WorkItemChangeDTO ToWorkItemChangeDTO(WorkItemChange workIteChange)
53+
{
54+
if (workIteChange == null) return null;
55+
56+
return new WorkItemChangeDTO()
57+
{
58+
NewDate = workIteChange.NewDate,
59+
NewState = workIteChange.NewState,
60+
OldState = workIteChange.OldState,
61+
OldDate = workIteChange.OldDate,
62+
ChangedBy = workIteChange.ChangedBy
63+
};
64+
}
65+
66+
public List<WorkItemChangeDTO> ToWorkItemsChangeDTO(List<WorkItemChange> workItemsChanges)
67+
{
68+
var workItemsChangeDTO = new List<WorkItemChangeDTO>();
69+
70+
if (workItemsChanges == null) return workItemsChangeDTO;
71+
72+
workItemsChanges.ForEach(
73+
workItemsChange =>
74+
workItemsChangeDTO.Add(ToWorkItemChangeDTO(workItemsChange)));
75+
76+
return workItemsChangeDTO
77+
.Where(w => w != null)
78+
.ToList();
79+
}
80+
81+
public TimeByStateDTO ToTimeByStateDTO(TimeByState workItemStatusTime)
82+
{
83+
if (workItemStatusTime == null) return null;
84+
85+
return new TimeByStateDTO()
86+
{
87+
CreatedAt = workItemStatusTime.CreatedAt,
88+
State = workItemStatusTime.State,
89+
//TotalTime = workItemStatusTime.TotalTimeText,
90+
//TotalWorkedTime = workItemStatusTime.TotalWorkedTimeText
91+
};
92+
}
93+
94+
public List<TimeByStateDTO> ToTimeByStatesDTO(List<TimeByState> workItemStatusTimes)
95+
{
96+
var workItemStatusTimeDTO = new List<TimeByStateDTO>();
97+
98+
if (workItemStatusTimes == null) return workItemStatusTimeDTO;
99+
100+
workItemStatusTimes.ForEach(
101+
workItemStatusTime =>
102+
workItemStatusTimeDTO.Add(ToTimeByStateDTO(workItemStatusTime)));
103+
104+
return workItemStatusTimeDTO
105+
.Where(w => w != null)
106+
.ToList();
107+
}
108+
}
109+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
10+
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.16" />
11+
</ItemGroup>
12+
13+
</Project>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 16
4+
VisualStudioVersion = 16.0.31402.337
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureDevopsStateTracker", "AzureDevopsStateTracker.csproj", "{E00DFF81-08B1-4A71-82C4-7CED951299BE}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{E00DFF81-08B1-4A71-82C4-7CED951299BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{E00DFF81-08B1-4A71-82C4-7CED951299BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{E00DFF81-08B1-4A71-82C4-7CED951299BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{E00DFF81-08B1-4A71-82C4-7CED951299BE}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
GlobalSection(ExtensibilityGlobals) = postSolution
23+
SolutionGuid = {53133A2B-5357-47B5-A1C4-30953F789623}
24+
EndGlobalSection
25+
EndGlobal
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using AzureDevopsStateTracker.Adapters;
2+
using AzureDevopsStateTracker.Data;
3+
using AzureDevopsStateTracker.Data.Context;
4+
using AzureDevopsStateTracker.Interfaces;
5+
using AzureDevopsStateTracker.Interfaces.Internals;
6+
using AzureDevopsStateTracker.Services;
7+
using Microsoft.AspNetCore.Builder;
8+
using Microsoft.EntityFrameworkCore;
9+
using Microsoft.Extensions.DependencyInjection;
10+
using System;
11+
12+
namespace AzureDevopsStateTracker.Configurations
13+
{
14+
public static class Configuration
15+
{
16+
public static IServiceCollection AddAzureDevopsStateTracker(this IServiceCollection services, DataBaseConfig configurations)
17+
{
18+
services.AddDbContext<AzureDevopsStateTrackerContext>(options =>
19+
options.UseSqlServer(DataBaseConfig.ConnectionsString));
20+
21+
services.AddScoped<AzureDevopsStateTrackerContext>();
22+
services.AddScoped<IWorkItemAdapter, WorkItemAdapter>();
23+
services.AddScoped<IWorkItemRepository, WorkItemRepository>();
24+
services.AddScoped<IAzureDevopsStateTrackerService, AzureDevopsStateTrackerService>();
25+
26+
return services;
27+
}
28+
29+
public static IApplicationBuilder UseAzureDevopsStateTracker(this IApplicationBuilder app, IServiceProvider serviceProvider)
30+
{
31+
var context = serviceProvider.GetService<AzureDevopsStateTrackerContext>();
32+
context.Database.Migrate();
33+
34+
return app;
35+
}
36+
}
37+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Newtonsoft.Json;
2+
3+
namespace AzureDevopsStateTracker.DTOs.Create
4+
{
5+
public class CreateWorkItemDTO
6+
{
7+
[JsonProperty("resource")]
8+
public Resource Resource { get; set; }
9+
}
10+
11+
public class Resource
12+
{
13+
[JsonProperty("id")]
14+
public string Id { get; set; }
15+
16+
[JsonProperty("fields")]
17+
public Fields Fields { get; set; }
18+
}
19+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
4+
namespace AzureDevopsStateTracker.DTOs
5+
{
6+
public class Fields
7+
{
8+
[JsonProperty("System.AreaPath")]
9+
public string AreaPath { get; set; }
10+
11+
[JsonProperty("System.TeamProject")]
12+
public string TeamProject { get; set; }
13+
14+
[JsonProperty("System.IterationPath")]
15+
public string IterationPath { get; set; }
16+
17+
[JsonProperty("System.AssignedTo")]
18+
public string AssignedTo { get; set; }
19+
20+
[JsonProperty("System.WorkItemType")]
21+
public string Type { get; set; }
22+
23+
[JsonProperty("System.CreatedDate")]
24+
public DateTime CreatedDate { get; set; }
25+
26+
[JsonProperty("System.CreatedBy")]
27+
public string CreatedBy { get; set; }
28+
29+
[JsonProperty("System.ChangedBy")]
30+
public string ChangedBy { get; set; }
31+
32+
[JsonProperty("System.State")]
33+
public string State { get; set; }
34+
35+
[JsonProperty("System.Title")]
36+
public string Title { get; set; }
37+
38+
[JsonProperty("System.Tags")]
39+
public string Tags { get; set; }
40+
41+
[JsonProperty("System.Parent")]
42+
public string Parent { get; set; }
43+
44+
[JsonProperty("Microsoft.VSTS.Scheduling.StoryPoints")]
45+
public string StoryPoints { get; set; }
46+
47+
[JsonProperty("Microsoft.VSTS.Scheduling.OriginalEstimate")]
48+
public string OriginalEstimate { get; set; }
49+
50+
[JsonProperty("Microsoft.VSTS.Scheduling.RemainingWork")]
51+
public string RemainingWork { get; set; }
52+
53+
[JsonProperty("Microsoft.VSTS.Scheduling.Effort")]
54+
public string Effort { get; set; }
55+
56+
[JsonProperty("Microsoft.VSTS.Common.Activity")]
57+
public string Activity { get; set; }
58+
}
59+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
4+
namespace AzureDevopsStateTracker.DTOs.Update
5+
{
6+
public class UpdatedWorkItemDTO
7+
{
8+
[JsonProperty("resource")]
9+
public Resource Resource { get; set; }
10+
}
11+
12+
public class Resource
13+
{
14+
[JsonProperty("workItemId")]
15+
public string WorkItemId { get; set; }
16+
17+
[JsonProperty("fields")]
18+
public ResourceFields Fields { get; set; }
19+
20+
[JsonProperty("revision")]
21+
public Revision Revision { get; set; }
22+
}
23+
24+
public class Revision
25+
{
26+
[JsonProperty("fields")]
27+
public Fields Fields { get; set; }
28+
}
29+
30+
public class ResourceFields
31+
{
32+
[JsonProperty("System.State")]
33+
public OldNewValues State { get; set; }
34+
35+
[JsonProperty("Microsoft.VSTS.Common.StateChangeDate")]
36+
public DateTimeOldNewValues StateChangeDate { get; set; }
37+
38+
[JsonProperty("System.ChangedBy")]
39+
public ChangedByOldNewValues ChangedBy { get; set; }
40+
}
41+
42+
public class OldNewValues
43+
{
44+
[JsonProperty("oldValue")]
45+
public string OldValue { get; set; }
46+
47+
[JsonProperty("newValue")]
48+
public string NewValue { get; set; }
49+
}
50+
51+
public class DateTimeOldNewValues
52+
{
53+
[JsonProperty("oldValue")]
54+
public DateTime OldValue { get; set; }
55+
56+
[JsonProperty("newValue")]
57+
public DateTime NewValue { get; set; }
58+
}
59+
60+
public class ChangedByOldNewValues
61+
{
62+
[JsonProperty("oldValue")]
63+
public string OldValue { get; set; }
64+
65+
[JsonProperty("newValue")]
66+
public string NewValue { get; set; }
67+
}
68+
}

0 commit comments

Comments
 (0)