Skip to content

Commit 51c6032

Browse files
Release ChangeLog function
1 parent 514dc97 commit 51c6032

16 files changed

+235
-10
lines changed

AzureDevopsTracker/Configurations/Configuration.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using AzureDevopsTracker.Adapters;
22
using AzureDevopsTracker.Data;
33
using AzureDevopsTracker.Data.Context;
4+
using AzureDevopsTracker.Integrations;
45
using AzureDevopsTracker.Interfaces;
56
using AzureDevopsTracker.Interfaces.Internals;
67
using AzureDevopsTracker.Services;
@@ -13,11 +14,13 @@ namespace AzureDevopsTracker.Configurations
1314
{
1415
public static class Configuration
1516
{
16-
public static IServiceCollection AddAzureDevopsTracker(this IServiceCollection services, DataBaseConfig configurations)
17+
public static IServiceCollection AddAzureDevopsTracker(this IServiceCollection services, DataBaseConfig configurations, MessageConfig messageConfig = null)
1718
{
1819
services.AddDbContext<AzureDevopsTrackerContext>(options =>
1920
options.UseSqlServer(DataBaseConfig.ConnectionsString));
2021

22+
services.AddMessageIntegrations();
23+
2124
services.AddScoped<AzureDevopsTrackerContext>();
2225
services.AddScoped<IWorkItemAdapter, WorkItemAdapter>();
2326
services.AddScoped<IWorkItemRepository, WorkItemRepository>();
@@ -26,6 +29,19 @@ public static IServiceCollection AddAzureDevopsTracker(this IServiceCollection s
2629

2730
services.AddScoped<IChangeLogService, ChangeLogService>();
2831
services.AddScoped<IChangeLogItemRepository, ChangeLogItemRepository>();
32+
services.AddScoped<IChangeLogRepository, ChangeLogRepository>();
33+
34+
return services;
35+
}
36+
37+
private static IServiceCollection AddMessageIntegrations(this IServiceCollection services)
38+
{
39+
if (MessageConfig.Messenger == null) return services;
40+
41+
if(MessageConfig.Messenger == EMessengers.DISCORD)
42+
services.AddScoped<MessageIntegration, DiscordIntegration>();
43+
else
44+
services.AddScoped<MessageIntegration, MicrosoftTeamsIntegration>();
2945

3046
return services;
3147
}

AzureDevopsTracker/Data/ChangeLogItemRepository.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using AzureDevopsTracker.Data.Context;
22
using AzureDevopsTracker.Entities;
33
using AzureDevopsTracker.Interfaces.Internals;
4+
using System.Collections.Generic;
45
using System.Linq;
56

67
namespace AzureDevopsTracker.Data
@@ -13,5 +14,10 @@ public int CountItemsForRelease()
1314
{
1415
return DbSet.Count(x => string.IsNullOrEmpty(x.ChangeLogId));
1516
}
17+
18+
public IEnumerable<ChangeLogItem> ListWaitingForRelease()
19+
{
20+
return DbSet.Where(x => string.IsNullOrEmpty(x.ChangeLogId));
21+
}
1622
}
1723
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using AzureDevopsTracker.Data.Context;
2+
using AzureDevopsTracker.Entities;
3+
using AzureDevopsTracker.Interfaces.Internals;
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Linq;
7+
8+
namespace AzureDevopsTracker.Data
9+
{
10+
internal class ChangeLogRepository : Repository<ChangeLog>, IChangeLogRepository
11+
{
12+
public ChangeLogRepository(AzureDevopsTrackerContext context) : base(context) { }
13+
14+
public int CountChangeLogsCreatedToday()
15+
{
16+
return DbSet.Count(x => x.CreatedAt.Date == DateTime.Now.Date);
17+
}
18+
}
19+
}

AzureDevopsTracker/Entities/ChangeLog.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ namespace AzureDevopsTracker.Entities
77
public class ChangeLog : Entity
88
{
99
public string Response { get; private set; }
10+
public string Number { get { return $"{ CreatedAt:yyyyMMdd}.{ Revision }"; } }
1011
public int Revision { get; set; }
1112

1213
private readonly List<ChangeLogItem> _changeLogItems = new List<ChangeLogItem>();
@@ -18,11 +19,6 @@ public ChangeLog(int newRevision)
1819
Revision = newRevision;
1920
}
2021

21-
public void ReleaseItems()
22-
{
23-
_changeLogItems.ForEach(c => c.Release(Id));
24-
}
25-
2622
public void SetResponse(string response)
2723
{
2824
Response = response;
@@ -41,16 +37,19 @@ public void AddChangeLogItem(ChangeLogItem changeLogItem)
4137
if (CheckChangeLogItem(changeLogItem))
4238
return;
4339

40+
changeLogItem.Release(Id);
4441
_changeLogItems.Add(changeLogItem);
4542
}
4643

4744
public void AddChangeLogItems(IEnumerable<ChangeLogItem> changeLogItems)
4845
{
4946
if (changeLogItems == null)
50-
throw new Exception("WorkItemType is required");
47+
throw new Exception("ChangeLogItems is required");
5148

5249
foreach (var changeLogItem in changeLogItems)
50+
{
5351
AddChangeLogItem(changeLogItem);
52+
}
5453
}
5554

5655
private bool CheckChangeLogItem(ChangeLogItem changeLogItem)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace AzureDevopsTracker.Helpers
6+
{
7+
internal static class MarkdownHelper
8+
{
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace AzureDevopsTracker.Helpers
6+
{
7+
internal static class MicrosoftTeamsHelper
8+
{
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace AzureDevopsTracker.Helpers
6+
{
7+
internal static class RawTextHelper
8+
{
9+
}
10+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using AzureDevopsTracker.Entities;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Text;
5+
6+
namespace AzureDevopsTracker.Integrations
7+
{
8+
internal class DiscordIntegration : MessageIntegration
9+
{
10+
internal override void Send(ChangeLog changeLog)
11+
{
12+
//Formatar o texto com o MarkdownHelper
13+
14+
//Faz o Post com a URL
15+
var url = MessageConfig.URL;
16+
17+
//Seta o retorno no ChangeLog
18+
19+
//Retorna o ChangeLog
20+
}
21+
}
22+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace AzureDevopsTracker.Integrations
6+
{
7+
public class MessageConfig
8+
{
9+
public MessageConfig(EMessengers messenger, string url)
10+
{
11+
Messenger = messenger;
12+
URL = url;
13+
}
14+
15+
public static EMessengers? Messenger { get; private set; }
16+
public static string URL { get; private set; }
17+
}
18+
19+
public enum EMessengers
20+
{
21+
DISCORD,
22+
MICROSOFT_TEAMS
23+
}
24+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using AzureDevopsTracker.Entities;
2+
using Microsoft.Extensions.DependencyInjection;
3+
using System;
4+
5+
namespace AzureDevopsTracker.Integrations
6+
{
7+
internal class MessageFacade
8+
{
9+
private readonly IServiceScopeFactory _serviceScopeFactory;
10+
11+
public MessageFacade(
12+
IServiceScopeFactory serviceScopeFactory)
13+
{
14+
_serviceScopeFactory = serviceScopeFactory;
15+
}
16+
17+
public void Send(ChangeLog changeLog)
18+
{
19+
using var scope = _serviceScopeFactory.CreateScope();
20+
21+
var messageIntegration = scope.ServiceProvider.GetService<MessageIntegration>();
22+
if (messageIntegration == null) throw new Exception("Configure the MessageConfig in Startup to send changelog messages");
23+
24+
messageIntegration.Send(changeLog);
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)