From 57cfb2824fd3e999b0881fa27c3b06c131249ae1 Mon Sep 17 00:00:00 2001 From: Diego Galante Date: Sat, 29 Jan 2022 13:59:30 -0300 Subject: [PATCH 1/2] Removing changelog item when new state is diferent do closed and exist ChangeLogItem in WorkItem --- AzureDevopsTracker/Entities/WorkItem.cs | 6 +++++ .../Services/AzureDevopsTrackerService.cs | 23 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/AzureDevopsTracker/Entities/WorkItem.cs b/AzureDevopsTracker/Entities/WorkItem.cs index 74accfb..87b6ca6 100644 --- a/AzureDevopsTracker/Entities/WorkItem.cs +++ b/AzureDevopsTracker/Entities/WorkItem.cs @@ -30,6 +30,7 @@ public class WorkItem : Entity private readonly List _timeByState; public IReadOnlyCollection TimeByStates => _timeByState; public string CurrentStatus => _workItemsChanges?.OrderBy(x => x.CreatedAt)?.LastOrDefault()?.NewState; + public string LastStatus => _workItemsChanges?.OrderBy(x => x.CreatedAt)?.ToList()?.Skip(1)?.LastOrDefault()?.OldState; private WorkItem() { @@ -108,6 +109,11 @@ public void ClearTimesByState() _timeByState.Clear(); } + public void RemoveChangeLogItem() + { + ChangeLogItem = null; + } + public void VinculateChangeLogItem(ChangeLogItem changeLogItem) { if (changeLogItem == null) diff --git a/AzureDevopsTracker/Services/AzureDevopsTrackerService.cs b/AzureDevopsTracker/Services/AzureDevopsTrackerService.cs index 9b28a57..8390321 100644 --- a/AzureDevopsTracker/Services/AzureDevopsTrackerService.cs +++ b/AzureDevopsTracker/Services/AzureDevopsTrackerService.cs @@ -15,12 +15,16 @@ public class AzureDevopsTrackerService : IAzureDevopsTrackerService { public readonly IWorkItemRepository _workItemRepository; public readonly IWorkItemAdapter _workItemAdapter; + public readonly IChangeLogItemRepository _changeLogItemRepository; public AzureDevopsTrackerService( - IWorkItemAdapter workItemAdapter, IWorkItemRepository workItemRepository) + IWorkItemAdapter workItemAdapter, + IWorkItemRepository workItemRepository, + IChangeLogItemRepository changeLogItemRepository) { _workItemAdapter = workItemAdapter; _workItemRepository = workItemRepository; + _changeLogItemRepository = changeLogItemRepository; } public async Task Create(CreateWorkItemDTO create, bool addWorkItemChange = true) @@ -163,6 +167,11 @@ public void RemoveTimeByStateFromDataBase(WorkItem workItem) public void CheckWorkItemAvailableToChangeLog(WorkItem workItem, Fields fields) { + if (workItem.CurrentStatus != "Closed" && + workItem.LastStatus == "Closed" && + workItem.ChangeLogItem != null) + RemoveChangeLogItem(workItem); + if (workItem.CurrentStatus != "Closed" || fields.ChangeLogDescription.IsNullOrEmpty()) return; @@ -188,6 +197,18 @@ public ChangeLogItem ToChangeLogItem(WorkItem workItem, Fields fields) { return new ChangeLogItem(workItem.Id, workItem.Title, fields.ChangeLogDescription, workItem.Type); } + + public void RemoveChangeLogItem(WorkItem workItem) + { + var changeLotItem = _changeLogItemRepository.GetById(workItem.ChangeLogItem?.Id).Result; + if (changeLotItem != null) + { + _changeLogItemRepository.Delete(changeLotItem); + _changeLogItemRepository.SaveChangesAsync().Wait(); + + workItem.RemoveChangeLogItem(); + } + } #endregion } } \ No newline at end of file From 978ffd1e51d3ab8e8e69c968fd9a692e1b3bc911 Mon Sep 17 00:00:00 2001 From: Diego Galante Date: Sat, 29 Jan 2022 15:39:18 -0300 Subject: [PATCH 2/2] Check if ChangeLogItem was released before delete it --- AzureDevopsTracker/Entities/ChangeLogItem.cs | 1 + AzureDevopsTracker/Services/AzureDevopsTrackerService.cs | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/AzureDevopsTracker/Entities/ChangeLogItem.cs b/AzureDevopsTracker/Entities/ChangeLogItem.cs index 84115c2..64ac837 100644 --- a/AzureDevopsTracker/Entities/ChangeLogItem.cs +++ b/AzureDevopsTracker/Entities/ChangeLogItem.cs @@ -10,6 +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()); /*EF*/ public ChangeLog ChangeLog { get; private set; } diff --git a/AzureDevopsTracker/Services/AzureDevopsTrackerService.cs b/AzureDevopsTracker/Services/AzureDevopsTrackerService.cs index 8390321..e0e07e4 100644 --- a/AzureDevopsTracker/Services/AzureDevopsTrackerService.cs +++ b/AzureDevopsTracker/Services/AzureDevopsTrackerService.cs @@ -169,7 +169,8 @@ public void CheckWorkItemAvailableToChangeLog(WorkItem workItem, Fields fields) { if (workItem.CurrentStatus != "Closed" && workItem.LastStatus == "Closed" && - workItem.ChangeLogItem != null) + workItem.ChangeLogItem != null && + !workItem.ChangeLogItem.WasReleased) RemoveChangeLogItem(workItem); if (workItem.CurrentStatus != "Closed" || @@ -200,10 +201,10 @@ public ChangeLogItem ToChangeLogItem(WorkItem workItem, Fields fields) public void RemoveChangeLogItem(WorkItem workItem) { - var changeLotItem = _changeLogItemRepository.GetById(workItem.ChangeLogItem?.Id).Result; - if (changeLotItem != null) + var changeLogItem = _changeLogItemRepository.GetById(workItem.ChangeLogItem?.Id).Result; + if (changeLogItem != null) { - _changeLogItemRepository.Delete(changeLotItem); + _changeLogItemRepository.Delete(changeLogItem); _changeLogItemRepository.SaveChangesAsync().Wait(); workItem.RemoveChangeLogItem();