diff --git a/src/Adapters/WorkItemAdapter.cs b/src/Adapters/WorkItemAdapter.cs index a7598ac..b56aa17 100644 --- a/src/Adapters/WorkItemAdapter.cs +++ b/src/Adapters/WorkItemAdapter.cs @@ -51,7 +51,7 @@ public List ToWorkItemsDto(List workItems) .ToList(); } - public WorkItemChangeDto ToWorkItemChangeDto(WorkItemChange workIteChange) + public static WorkItemChangeDto ToWorkItemChangeDto(WorkItemChange workIteChange) { if (workIteChange is null) return null; @@ -65,7 +65,7 @@ public WorkItemChangeDto ToWorkItemChangeDto(WorkItemChange workIteChange) }; } - public List ToWorkItemsChangeDto(List workItemsChanges) + public static List ToWorkItemsChangeDto(List workItemsChanges) { var workItemsChangeDto = new List(); @@ -80,7 +80,7 @@ public List ToWorkItemsChangeDto(List workIte .ToList(); } - public TimeByStateDto ToTimeByStateDto(TimeByState workItemStatusTime) + public static TimeByStateDto ToTimeByStateDto(TimeByState workItemStatusTime) { if (workItemStatusTime is null) return null; @@ -93,7 +93,7 @@ public TimeByStateDto ToTimeByStateDto(TimeByState workItemStatusTime) }; } - public List ToTimeByStatesDto(List workItemStatusTimes) + public static List ToTimeByStatesDto(List workItemStatusTimes) { var workItemStatusTimeDto = new List(); diff --git a/src/AzureDevopsTracker.csproj b/src/AzureDevopsTracker.csproj index aa7c3b4..1e967cd 100644 --- a/src/AzureDevopsTracker.csproj +++ b/src/AzureDevopsTracker.csproj @@ -2,7 +2,7 @@ net5.0 - False + True AzureDevOpsTracker Elvis Souza | Diego Galante TypingHard @@ -18,11 +18,18 @@ LICENSE.md.txt A NuGet that allows you to use a Azure DevOps Service Hook to track workitems changes in a simply and detailed way. 5.0.0.0 - 5.0.5 - 5.0.5 + 5.0.6 + 5.0.6 Add ChangeLog Feature + + + True + + + + @@ -30,13 +37,6 @@ - - - True - - - - True diff --git a/src/Configurations/Configuration.cs b/src/Configurations/Configuration.cs index c9adcd0..cafa106 100644 --- a/src/Configurations/Configuration.cs +++ b/src/Configurations/Configuration.cs @@ -10,16 +10,31 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System; +using System.Linq; namespace AzureDevopsTracker.Configurations { public static class Configuration { - public static IServiceCollection AddAzureDevopsTracker(this IServiceCollection services, DataBaseConfig configurations, MessageConfig messageConfig = null) + public static IServiceCollection AddAzureDevopsTracker(this IServiceCollection services, + DataBaseConfig configurations, + MessageConfig messageConfig = null) { services.AddDbContext(options => options.UseSqlServer(DataBaseConfig.ConnectionsString)); + try + { + using var serviceScope = services.BuildServiceProvider().CreateScope(); + var dbContext = serviceScope.ServiceProvider.GetRequiredService(); + + var pendingMigrations = dbContext.Database.GetPendingMigrations(); + if (pendingMigrations.Any()) + dbContext.Database.Migrate(); + } + catch + { } + services.AddMessageIntegrations(); services.AddSingleton(); diff --git a/src/Data/ChangeLogItemRepository.cs b/src/Data/ChangeLogItemRepository.cs index b4b0939..02d3746 100644 --- a/src/Data/ChangeLogItemRepository.cs +++ b/src/Data/ChangeLogItemRepository.cs @@ -1,8 +1,10 @@ using AzureDevopsTracker.Data.Context; using AzureDevopsTracker.Entities; using AzureDevopsTracker.Interfaces.Internals; +using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace AzureDevopsTracker.Data { @@ -10,14 +12,14 @@ internal class ChangeLogItemRepository : Repository, IChangeLogIt { public ChangeLogItemRepository(AzureDevopsTrackerContext context) : base(context) { } - public int CountItemsForRelease() + public async Task CountItemsForRelease() { - return DbSet.Count(x => string.IsNullOrEmpty(x.ChangeLogId)); + return await DbSet.CountAsync(x => string.IsNullOrEmpty(x.ChangeLogId)); } - public IEnumerable ListWaitingForRelease() + public async Task> ListWaitingForRelease() { - return DbSet.Where(x => string.IsNullOrEmpty(x.ChangeLogId)); + return await DbSet.Where(x => string.IsNullOrEmpty(x.ChangeLogId)).ToListAsync(); } } } \ No newline at end of file diff --git a/src/Data/ChangeLogRepository.cs b/src/Data/ChangeLogRepository.cs index 503cbff..c12243a 100644 --- a/src/Data/ChangeLogRepository.cs +++ b/src/Data/ChangeLogRepository.cs @@ -1,8 +1,9 @@ using AzureDevopsTracker.Data.Context; using AzureDevopsTracker.Entities; using AzureDevopsTracker.Interfaces.Internals; +using Microsoft.EntityFrameworkCore; using System; -using System.Linq; +using System.Threading.Tasks; namespace AzureDevopsTracker.Data { @@ -10,9 +11,9 @@ internal class ChangeLogRepository : Repository, IChangeLogRepository { public ChangeLogRepository(AzureDevopsTrackerContext context) : base(context) { } - public int CountChangeLogsCreatedToday() + public async Task CountChangeLogsCreatedToday() { - return DbSet.Count(x => x.CreatedAt.Date == DateTime.Now.Date); + return await DbSet.CountAsync(x => x.CreatedAt.Date == DateTime.Now.Date); } } } \ No newline at end of file diff --git a/src/Data/Repository.cs b/src/Data/Repository.cs index 3bf46b4..693cac2 100644 --- a/src/Data/Repository.cs +++ b/src/Data/Repository.cs @@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; namespace AzureDevopsTracker.Data diff --git a/src/Entities/ChangeLogItem.cs b/src/Entities/ChangeLogItem.cs index b572ffd..29aca95 100644 --- a/src/Entities/ChangeLogItem.cs +++ b/src/Entities/ChangeLogItem.cs @@ -10,7 +10,7 @@ public class ChangeLogItem : Entity public string Description { get; private set; } public string WorkItemType { get; private set; } public string ChangeLogId { get; private set; } - public bool WasReleased => string.IsNullOrEmpty(ChangeLogId?.Trim()); + public bool WasReleased => string.IsNullOrWhiteSpace(ChangeLogId); public ChangeLog ChangeLog { get; private set; } private ChangeLogItem() { } diff --git a/src/Entities/WorkItem.cs b/src/Entities/WorkItem.cs index 7a705cc..d77090b 100644 --- a/src/Entities/WorkItem.cs +++ b/src/Entities/WorkItem.cs @@ -142,7 +142,9 @@ public IEnumerable CalculateTotalTimeByState() if (!_workItemsChanges.Any()) return timesByStateList; - foreach (var workItemChange in _workItemsChanges.OrderBy(x => x.CreatedAt).GroupBy(x => x.OldState).Where(x => x.Key is not null)) + foreach (var workItemChange in _workItemsChanges.OrderBy(x => x.CreatedAt) + .GroupBy(x => x.OldState) + .Where(x => x.Key is not null)) { var totalTime = TimeSpan.Zero; var totalWorkedTime = TimeSpan.Zero; diff --git a/src/Entities/WorkItemChange.cs b/src/Entities/WorkItemChange.cs index a1f39fa..5b601ac 100644 --- a/src/Entities/WorkItemChange.cs +++ b/src/Entities/WorkItemChange.cs @@ -139,7 +139,7 @@ public double CalculateTotalWorkedTime() } #region Private Methods - private TimeSpan SubtractDates(DateTime biger, DateTime minor) + private static TimeSpan SubtractDates(DateTime biger, DateTime minor) { if (biger.Hour == minor.Hour) { diff --git a/src/Integrations/DiscordIntegration.cs b/src/Integrations/DiscordIntegration.cs index 16fe655..f3868f2 100644 --- a/src/Integrations/DiscordIntegration.cs +++ b/src/Integrations/DiscordIntegration.cs @@ -5,12 +5,13 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace AzureDevopsTracker.Integrations { internal class DiscordIntegration : MessageIntegration { - internal override void Send(ChangeLog changeLog) + internal override async Task Send(ChangeLog changeLog) { var embedsDTO = new EmbedsDTO { @@ -26,7 +27,7 @@ internal override void Send(ChangeLog changeLog) }, }; - Notify(embedsDTO); + await Notify(embedsDTO); } public class EmbedsDTO @@ -97,7 +98,7 @@ public class Field public bool IsInline { get; set; } } - private IEnumerable GetText(ChangeLog changeLog) + private static IEnumerable GetText(ChangeLog changeLog) { var changeLogItemsAgrupado = changeLog.ChangeLogItems.GroupBy(d => d.WorkItemType); diff --git a/src/Integrations/FakeIntegration.cs b/src/Integrations/FakeIntegration.cs index f32fc57..68d3cfc 100644 --- a/src/Integrations/FakeIntegration.cs +++ b/src/Integrations/FakeIntegration.cs @@ -1,9 +1,10 @@ using AzureDevopsTracker.Entities; +using System.Threading.Tasks; namespace AzureDevopsTracker.Integrations { internal class FakeIntegration : MessageIntegration { - internal override void Send(ChangeLog changeLog) { } + internal override async Task Send(ChangeLog changeLog) { } } } diff --git a/src/Integrations/MessageFacade.cs b/src/Integrations/MessageFacade.cs index b41e5b8..a25f511 100644 --- a/src/Integrations/MessageFacade.cs +++ b/src/Integrations/MessageFacade.cs @@ -1,6 +1,7 @@ using AzureDevopsTracker.Entities; using Microsoft.Extensions.DependencyInjection; using System; +using System.Threading.Tasks; namespace AzureDevopsTracker.Integrations { @@ -14,14 +15,14 @@ public MessageFacade( _serviceScopeFactory = serviceScopeFactory; } - public void Send(ChangeLog changeLog) + public async Task Send(ChangeLog changeLog) { using var scope = _serviceScopeFactory.CreateScope(); var messageIntegration = scope.ServiceProvider.GetService(); if (messageIntegration is null) throw new Exception("Configure the MessageConfig in Startup to send changelog messages"); - messageIntegration.Send(changeLog); + await messageIntegration.Send(changeLog); } } } diff --git a/src/Integrations/MessageIntegration.cs b/src/Integrations/MessageIntegration.cs index 9bb9fa0..781cd81 100644 --- a/src/Integrations/MessageIntegration.cs +++ b/src/Integrations/MessageIntegration.cs @@ -2,59 +2,58 @@ using System; using System.Net.Http; using System.Text; +using System.Threading.Tasks; namespace AzureDevopsTracker.Integrations { public abstract class MessageIntegration { - internal abstract void Send(ChangeLog changeLog); + internal abstract Task Send(ChangeLog changeLog); private static readonly string MIMETYPE = "application/json"; private static readonly string CDN_URL = "https://cdn.typinghard.tech/"; private static readonly string MEGAFONE_GIF = "megafone.gif"; private static readonly string LOGO_TYPINGHARD_16X16 = "logo-typinghard-16x16.png"; - protected internal string GetTitle() + protected internal static string GetTitle() { return $"Nova atualização da plataforma"; } - protected internal string GetVersion(ChangeLog changeLog) + protected internal static string GetVersion(ChangeLog changeLog) { return $"Versão: {changeLog.Number}"; } - protected internal string GetAnnouncementImageUrl() + protected internal static string GetAnnouncementImageUrl() { return $"{CDN_URL}{MEGAFONE_GIF}"; } - protected internal string GetLogoTypingHard16x16Url() + protected internal static string GetLogoTypingHard16x16Url() { return $"{CDN_URL}{LOGO_TYPINGHARD_16X16}"; } - protected internal string GetFileVersion() + protected internal static string GetFileVersion() { System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); System.Diagnostics.FileVersionInfo fileVersionInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location); return fileVersionInfo.FileVersion; } - protected internal string GetNugetVersion() + protected internal static string GetNugetVersion() { return $"Powered by **Typing Hard** • nuget version {GetFileVersion()}"; } - protected internal HttpResponseMessage Notify(object body) + protected internal static async Task Notify(object body) { var json = Newtonsoft.Json.JsonConvert.SerializeObject(body); var content = new StringContent(json, Encoding.UTF8, MIMETYPE); - HttpClient client = new HttpClient(); - return client.PostAsync(new Uri(MessageConfig.URL), - content).Result; - + using HttpClient client = new(); + return await client.PostAsync(new Uri(MessageConfig.URL), content); } } } diff --git a/src/Integrations/MicrosoftTeamsIntegration.cs b/src/Integrations/MicrosoftTeamsIntegration.cs index 1933002..57af2f9 100644 --- a/src/Integrations/MicrosoftTeamsIntegration.cs +++ b/src/Integrations/MicrosoftTeamsIntegration.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading.Tasks; namespace AzureDevopsTracker.Integrations { @@ -38,7 +39,7 @@ internal static class MicrosoftTeamsStatics internal static readonly int CLOSING_DIV_SIZE = 6; } - internal override void Send(ChangeLog changeLog) + internal override async Task Send(ChangeLog changeLog) { var values = new MicrosoftTeamsMessage() { @@ -59,10 +60,10 @@ internal override void Send(ChangeLog changeLog) } }; - Notify(values); + await Notify(values); } - private string GetText(ChangeLog changeLog) + private static string GetText(ChangeLog changeLog) { if (changeLog is null || !changeLog.ChangeLogItems.Any()) return string.Empty; @@ -74,7 +75,7 @@ private string GetText(ChangeLog changeLog) return text.ToString(); } - private string GetWorkItemsDescriptionSection(string sectionName, IEnumerable changeLogItems) + private static string GetWorkItemsDescriptionSection(string sectionName, IEnumerable changeLogItems) { StringBuilder text = new(); if (!changeLogItems.Any()) return string.Empty; @@ -87,18 +88,18 @@ private string GetWorkItemsDescriptionSection(string sectionName, IEnumerable**{workItem.WorkItemId}** - {description}
"; } - private string GetDescription(string description) + private static string GetDescription(string description) { return description.Replace("
", "").Replace("
", "").Replace("
", ""); } - private string GetFooter() + private static string GetFooter() { return $"
{GetNugetVersion()}"; } diff --git a/src/Interfaces/IChangeLogService.cs b/src/Interfaces/IChangeLogService.cs index 3c97c16..e303353 100644 --- a/src/Interfaces/IChangeLogService.cs +++ b/src/Interfaces/IChangeLogService.cs @@ -1,11 +1,12 @@ using AzureDevopsTracker.Entities; +using System.Threading.Tasks; namespace AzureDevopsTracker.Interfaces { public interface IChangeLogService { - int CountItemsForRelease(); - ChangeLog Release(); - string SendToMessengers(ChangeLog changeLog); + Task CountItemsForRelease(); + Task Release(); + Task SendToMessengers(ChangeLog changeLog); } } \ No newline at end of file diff --git a/src/Interfaces/Internals/IChangeLogItemRepository.cs b/src/Interfaces/Internals/IChangeLogItemRepository.cs index 0fe8145..eca1cec 100644 --- a/src/Interfaces/Internals/IChangeLogItemRepository.cs +++ b/src/Interfaces/Internals/IChangeLogItemRepository.cs @@ -1,11 +1,12 @@ using AzureDevopsTracker.Entities; using System.Collections.Generic; +using System.Threading.Tasks; namespace AzureDevopsTracker.Interfaces.Internals { public interface IChangeLogItemRepository : IRepository { - int CountItemsForRelease(); - IEnumerable ListWaitingForRelease(); + Task CountItemsForRelease(); + Task> ListWaitingForRelease(); } } \ No newline at end of file diff --git a/src/Interfaces/Internals/IChangeLogRepository.cs b/src/Interfaces/Internals/IChangeLogRepository.cs index 07a8e15..05b0dae 100644 --- a/src/Interfaces/Internals/IChangeLogRepository.cs +++ b/src/Interfaces/Internals/IChangeLogRepository.cs @@ -1,9 +1,10 @@ using AzureDevopsTracker.Entities; +using System.Threading.Tasks; namespace AzureDevopsTracker.Interfaces.Internals { public interface IChangeLogRepository : IRepository { - int CountChangeLogsCreatedToday(); + Task CountChangeLogsCreatedToday(); } } \ No newline at end of file diff --git a/src/Services/AzureDevopsTrackerService.cs b/src/Services/AzureDevopsTrackerService.cs index 06ccd9f..5f40371 100644 --- a/src/Services/AzureDevopsTrackerService.cs +++ b/src/Services/AzureDevopsTrackerService.cs @@ -57,9 +57,9 @@ public async Task Create(CreateWorkItemDto create, bool addWorkItemChange = true if (addWorkItemChange) AddWorkItemChange(workItem, create); - CheckWorkItemAvailableToChangeLog(workItem, create.Resource.Fields); + await CheckWorkItemAvailableToChangeLog(workItem, create.Resource.Fields); - AddCustomFields(workItem); + await AddCustomFields(workItem); await _workItemRepository.Add(workItem); await _workItemRepository.SaveChangesAsync(); @@ -81,7 +81,7 @@ public async Task Create(string workItemId, Fields fields) public async Task Update(UpdatedWorkItemDto update) { - if (!_workItemRepository.Exist(update.Resource.WorkItemId).Result) + if (!await _workItemRepository.Exist(update.Resource.WorkItemId)) await Create(update.Resource.WorkItemId, update.Resource.Revision.Fields); var workItem = await _workItemRepository.GetByWorkItemId(update.Resource.WorkItemId); @@ -104,9 +104,9 @@ public async Task Update(UpdatedWorkItemDto update) AddWorkItemChange(workItem, update); - CheckWorkItemAvailableToChangeLog(workItem, update.Resource.Revision.Fields); + await CheckWorkItemAvailableToChangeLog(workItem, update.Resource.Revision.Fields); - AddCustomFields(workItem); + await AddCustomFields(workItem); _workItemRepository.Update(workItem); await _workItemRepository.SaveChangesAsync(); @@ -114,7 +114,7 @@ public async Task Update(UpdatedWorkItemDto update) public async Task Delete(DeleteWorkItemDto delete) { - if (!_workItemRepository.Exist(delete.Resource.Id).Result) + if (!await _workItemRepository.Exist(delete.Resource.Id)) await Create(delete.Resource.Id, delete.Resource.Fields); var workItem = await _workItemRepository.GetByWorkItemId(delete.Resource.Id); @@ -137,7 +137,7 @@ public async Task Delete(DeleteWorkItemDto delete) delete.Resource.Fields.OriginalEstimate, delete.Resource.Fields.Activity); - AddCustomFields(workItem); + await AddCustomFields(workItem); _workItemRepository.Update(workItem); await _workItemRepository.SaveChangesAsync(); @@ -145,7 +145,7 @@ public async Task Delete(DeleteWorkItemDto delete) public async Task Restore(RestoreWorkItemDto restore) { - if (!_workItemRepository.Exist(restore.Resource.Id).Result) + if (!await _workItemRepository.Exist(restore.Resource.Id)) await Create(restore.Resource.Id, restore.Resource.Fields); var workItem = await _workItemRepository.GetByWorkItemId(restore.Resource.Id); @@ -168,7 +168,7 @@ public async Task Restore(RestoreWorkItemDto restore) restore.Resource.Fields.OriginalEstimate, restore.Resource.Fields.Activity); - AddCustomFields(workItem); + await AddCustomFields(workItem); _workItemRepository.Update(workItem); await _workItemRepository.SaveChangesAsync(); @@ -184,11 +184,11 @@ public async Task GetByWorkItemId(string workItemId) } #region Support Methods - public void AddCustomFields(WorkItem workItem) + public async Task AddCustomFields(WorkItem workItem) { try { - var jsonText = GetRequestBody(); + var jsonText = await GetRequestBody(); if (jsonText.IsNullOrEmpty()) return; @@ -202,7 +202,7 @@ public void AddCustomFields(WorkItem workItem) { } } - public string GetRequestBody() + public async Task GetRequestBody() { string corpo; var request = _httpContextAccessor?.HttpContext?.Request; @@ -212,13 +212,13 @@ public string GetRequestBody() leaveOpen: true)) { request.Body.Position = 0; - corpo = reader.ReadToEndAsync()?.Result; + corpo = await reader.ReadToEndAsync(); } return corpo; } - public WorkItemChange ToWorkItemChange( + public static WorkItemChange ToWorkItemChange( string workItemId, string changedBy, string iterationPath, DateTime newDate, string newState, string oldState = null, DateTime? oldDate = null) @@ -226,7 +226,7 @@ public WorkItemChange ToWorkItemChange( return new WorkItemChange(workItemId, changedBy.ExtractEmail(), iterationPath, newDate, newState, oldState, oldDate); } - public void AddWorkItemChange(WorkItem workItem, CreateWorkItemDto create) + public static void AddWorkItemChange(WorkItem workItem, CreateWorkItemDto create) { var workItemChange = ToWorkItemChange(workItem.Id, create.Resource.Fields.ChangedBy, @@ -275,13 +275,13 @@ public void RemoveTimeByStateFromDataBase(WorkItem workItem) _workItemRepository.RemoveAllTimeByState(workItem.TimeByStates.ToList()); } - public void CheckWorkItemAvailableToChangeLog(WorkItem workItem, Fields fields) + public async Task CheckWorkItemAvailableToChangeLog(WorkItem workItem, Fields fields) { if (workItem.CurrentStatus != "Closed" && workItem.LastStatus == "Closed" && workItem.ChangeLogItem is not null && !workItem.ChangeLogItem.WasReleased) - RemoveChangeLogItem(workItem); + await RemoveChangeLogItem(workItem); if (workItem.CurrentStatus != "Closed" || fields.ChangeLogDescription.IsNullOrEmpty()) @@ -293,7 +293,7 @@ workItem.ChangeLogItem is not null && workItem.ChangeLogItem.Update(workItem.Title, workItem.Type, fields.ChangeLogDescription); } - public bool CheckWorkItemChangeExists(WorkItem workItem, WorkItemChange newWorkItemChange) + public static bool CheckWorkItemChangeExists(WorkItem workItem, WorkItemChange newWorkItemChange) { return workItem.WorkItemsChanges.Any(x => x.NewDate == newWorkItemChange.NewDate && x.OldDate == newWorkItemChange.OldDate && @@ -304,18 +304,18 @@ public bool CheckWorkItemChangeExists(WorkItem workItem, WorkItemChange newWorkI x.TotalWorkedTime == newWorkItemChange.TotalWorkedTime); } - public ChangeLogItem ToChangeLogItem(WorkItem workItem, Fields fields) + public static ChangeLogItem ToChangeLogItem(WorkItem workItem, Fields fields) { return new ChangeLogItem(workItem.Id, workItem.Title, fields.ChangeLogDescription, workItem.Type); } - public void RemoveChangeLogItem(WorkItem workItem) + public async Task RemoveChangeLogItem(WorkItem workItem) { - var changeLogItem = _changeLogItemRepository.GetById(workItem.ChangeLogItem?.Id).Result; + var changeLogItem = await _changeLogItemRepository.GetById(workItem.ChangeLogItem?.Id); if (changeLogItem is not null) { _changeLogItemRepository.Delete(changeLogItem); - _changeLogItemRepository.SaveChangesAsync().Wait(); + await _changeLogItemRepository.SaveChangesAsync(); workItem.RemoveChangeLogItem(); } diff --git a/src/Services/ChangeLogService.cs b/src/Services/ChangeLogService.cs index baef4fa..7e097f5 100644 --- a/src/Services/ChangeLogService.cs +++ b/src/Services/ChangeLogService.cs @@ -5,6 +5,7 @@ using AzureDevopsTracker.Statics; using Microsoft.Extensions.Configuration; using System.Linq; +using System.Threading.Tasks; namespace AzureDevopsTracker.Services { @@ -27,37 +28,37 @@ public ChangeLogService( _messageIntegration = messageIntegration; } - public int CountItemsForRelease() + public async Task CountItemsForRelease() { - return _changeLogItemRepository.CountItemsForRelease(); + return await _changeLogItemRepository.CountItemsForRelease(); } - public ChangeLog Release() + public async Task Release() { - var changeLogItems = _changeLogItemRepository.ListWaitingForRelease(); + var changeLogItems = await _changeLogItemRepository.ListWaitingForRelease(); if (!changeLogItems.Any()) return null; - var changeLog = CreateChangeLog(); + var changeLog = await CreateChangeLog(); changeLog.AddChangeLogItems(changeLogItems); - _changeLogRepository.Add(changeLog).Wait(); - _changeLogRepository.SaveChangesAsync().Wait(); + await _changeLogRepository.Add(changeLog); + await _changeLogRepository.SaveChangesAsync(); return changeLog; } - public string SendToMessengers(ChangeLog changeLog) + public async Task SendToMessengers(ChangeLog changeLog) { - _messageIntegration.Send(changeLog); + await _messageIntegration.Send(changeLog); return $"The ChangeLog {changeLog.Number} was released."; } - private ChangeLog CreateChangeLog() + private async Task CreateChangeLog() { if (string.IsNullOrEmpty(_configuration[ConfigurationStatics.ADT_CHANGELOG_VERSION])) { - var changeLogsQuantity = _changeLogRepository.CountChangeLogsCreatedToday(); + var changeLogsQuantity = await _changeLogRepository.CountChangeLogsCreatedToday(); return new ChangeLog(changeLogsQuantity + 1); } return new ChangeLog(_configuration[ConfigurationStatics.ADT_CHANGELOG_VERSION]); diff --git a/tests/AzureDevopsTracker.Tests/Usings.cs b/tests/AzureDevopsTracker.Tests/Usings.cs index 209548e..9d6c592 100644 --- a/tests/AzureDevopsTracker.Tests/Usings.cs +++ b/tests/AzureDevopsTracker.Tests/Usings.cs @@ -1,3 +1,3 @@ -global using Xunit; global using AzureDevopsTracker.Entities; -global using FluentAssertions; \ No newline at end of file +global using FluentAssertions; +global using Xunit;