Skip to content

Commit 3f7fcdf

Browse files
authored
Merge pull request #414 from Strongminds/feature/KITOSUDV-1012-subtasks-1412-1413
Feature/kitosudv 1012 subtasks 1412 1413
2 parents dd5a3cb + 58ab649 commit 3f7fcdf

18 files changed

+338
-147
lines changed

Core.BackgroundJobs/Model/ReadModels/ScheduleItSystemUsageOverviewReadModelUpdates.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public Task<Result<string, OperationError>> ExecuteAsync(CancellationToken token
4747
updatesExecuted = HandleOrganizationUpdated(token, updatesExecuted, alreadyScheduledIds);
4848
updatesExecuted = HandleBusinessTypeUpdates(token, updatesExecuted, alreadyScheduledIds);
4949
updatesExecuted = HandleTaskRefUpdates(token, updatesExecuted, alreadyScheduledIds);
50+
updatesExecuted = HandleContractUpdates(token, updatesExecuted, alreadyScheduledIds);
5051

5152
return Task.FromResult(Result<string, OperationError>.Success($"Completed {updatesExecuted} updates"));
5253
}
@@ -110,13 +111,8 @@ private int HandleOrganizationUpdated(CancellationToken token, int updatesExecut
110111
break;
111112

112113
using var transaction = _transactionManager.Begin(IsolationLevel.ReadCommitted);
113-
var systemIds = _itSystemRepository.GetByRightsHolderId(update.SourceId).Select(x => x.Id).ToList();
114114

115-
var systemUsageIds = _itSystemUsageRepository.GetBySystemIds(systemIds).Select(x => x.Id);
116-
117-
var readModelIds = _readModelRepository.GetByRightsHolderId(update.SourceId).Select(x => x.SourceEntityId);
118-
119-
var ids = systemUsageIds.Concat(readModelIds).Distinct();
115+
var ids = _readModelRepository.GetByDependentOrganizationId(update.SourceId).Select(x => x.SourceEntityId);
120116

121117
updatesExecuted = PerformUpdate(updatesExecuted, alreadyScheduledIds, ids, update, transaction);
122118
}
@@ -158,6 +154,23 @@ private int HandleTaskRefUpdates(CancellationToken token, int updatesExecuted, H
158154
return updatesExecuted;
159155
}
160156

157+
private int HandleContractUpdates(CancellationToken token, int updatesExecuted, HashSet<int> alreadyScheduledIds)
158+
{
159+
foreach (var update in _updateRepository.GetMany(PendingReadModelUpdateSourceCategory.ItSystemUsage_Contract, BatchSize).ToList())
160+
{
161+
if (token.IsCancellationRequested)
162+
break;
163+
164+
using var transaction = _transactionManager.Begin(IsolationLevel.ReadCommitted);
165+
166+
var ids = _readModelRepository.GetByContractId(update.SourceId).Select(x => x.SourceEntityId);
167+
168+
updatesExecuted = PerformUpdate(updatesExecuted, alreadyScheduledIds, ids, update, transaction);
169+
}
170+
171+
return updatesExecuted;
172+
}
173+
161174

162175
private int PerformUpdate(
163176
int updatesExecuted,

Core.DomainModel/BackgroundJobs/PendingReadModelUpdate.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ public enum PendingReadModelUpdateSourceCategory
1818
ItSystemUsage_OrganizationUnit = 11,
1919
ItSystemUsage_Organization = 12,
2020
ItSystemUsage_BusinessType = 13,
21-
ItSystemUsage_TaskRef = 14
21+
ItSystemUsage_TaskRef = 14,
22+
ItSystemUsage_Contract = 15
2223
}
2324

2425
public class PendingReadModelUpdate

Core.DomainModel/ItSystemUsage/Read/ItSystemUsageOverviewReadModel.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,10 @@ public ItSystemUsageOverviewReadModel()
4848
public string LastChangedByName { get; set; }
4949
public DateTime LastChanged { get; set; }
5050
public DateTime? Concluded { get; set; }
51+
52+
public int? MainContractId { get; set; }
53+
public string MainContractName { get; set; }
54+
public int? MainContractSupplierId { get; set; }
55+
public string MainContractSupplierName { get; set; }
5156
}
5257
}

Core.DomainServices/Repositories/SystemUsage/IItSystemUsageOverviewReadModelRepository.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ public interface IItSystemUsageOverviewReadModelRepository
1515
void Update(ItSystemUsageOverviewReadModel readModel);
1616
IQueryable<ItSystemUsageOverviewReadModel> GetByUserId(int userId);
1717
IQueryable<ItSystemUsageOverviewReadModel> GetByOrganizationUnitId(int organizationUnitId);
18-
IQueryable<ItSystemUsageOverviewReadModel> GetByRightsHolderId(int organizationId);
18+
IQueryable<ItSystemUsageOverviewReadModel> GetByDependentOrganizationId(int organizationId);
1919
IQueryable<ItSystemUsageOverviewReadModel> GetByBusinessTypeId(int businessTypeId);
20+
IQueryable<ItSystemUsageOverviewReadModel> GetByContractId(int contractId);
2021
}
2122
}

Core.DomainServices/Repositories/SystemUsage/ItSystemUsageOverviewReadModelRepository.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ public IQueryable<ItSystemUsageOverviewReadModel> GetByOrganizationUnitId(int or
7676
.Where(x => x.ResponsibleOrganizationUnitId == organizationUnitId);
7777
}
7878

79-
public IQueryable<ItSystemUsageOverviewReadModel> GetByRightsHolderId(int organizationId)
79+
public IQueryable<ItSystemUsageOverviewReadModel> GetByDependentOrganizationId(int organizationId)
8080
{
81-
//Gets all read models that have dependencies on the ItSystems RightsHolder organization
81+
//Gets all read models that have dependencies on the ItSystems RightsHolder organization or on the MainContracts Supplier
8282
return _repository
8383
.AsQueryable()
84-
.Where(x => x.ItSystemRightsHolderId == organizationId);
84+
.Where(x => x.ItSystemRightsHolderId == organizationId || x.MainContractSupplierId == organizationId);
8585
}
8686

8787
public IQueryable<ItSystemUsageOverviewReadModel> GetByBusinessTypeId(int businessTypeId)
@@ -90,5 +90,12 @@ public IQueryable<ItSystemUsageOverviewReadModel> GetByBusinessTypeId(int busine
9090
.AsQueryable()
9191
.Where(x => x.ItSystemBusinessTypeId == businessTypeId);
9292
}
93+
94+
public IQueryable<ItSystemUsageOverviewReadModel> GetByContractId(int contractId)
95+
{
96+
return _repository
97+
.AsQueryable()
98+
.Where(x => x.MainContractId == contractId);
99+
}
93100
}
94101
}

Core.DomainServices/SystemUsage/BuildItSystemUsageOverviewReadModelOnChangesHandler.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Core.DomainModel;
22
using Core.DomainModel.BackgroundJobs;
3+
using Core.DomainModel.ItContract;
4+
using Core.DomainModel.ItContract.DomainEvents;
35
using Core.DomainModel.ItSystem;
46
using Core.DomainModel.ItSystemUsage;
57
using Core.DomainModel.ItSystemUsage.Read;
@@ -28,7 +30,9 @@ public class BuildItSystemUsageOverviewReadModelOnChangesHandler :
2830
IDomainEventHandler<EntityUpdatedEvent<TaskRef>>,
2931
IDomainEventHandler<EntityDeletedEvent<ExternalReference>>,
3032
IDomainEventHandler<EntityCreatedEvent<ExternalReference>>,
31-
IDomainEventHandler<EntityUpdatedEvent<ExternalReference>>
33+
IDomainEventHandler<EntityUpdatedEvent<ExternalReference>>,
34+
IDomainEventHandler<EntityUpdatedEvent<ItContract>>,
35+
IDomainEventHandler<ContractDeleted>
3236
{
3337
private readonly IPendingReadModelUpdateRepository _pendingReadModelUpdateRepository;
3438
private readonly IItSystemUsageOverviewReadModelRepository _readModelRepository;
@@ -118,6 +122,16 @@ public void Handle(EntityUpdatedEvent<TaskRef> domainEvent)
118122
_pendingReadModelUpdateRepository.Add(PendingReadModelUpdate.Create(domainEvent.Entity, PendingReadModelUpdateSourceCategory.ItSystemUsage_TaskRef));
119123
}
120124

125+
public void Handle(EntityUpdatedEvent<ItContract> domainEvent)
126+
{
127+
_pendingReadModelUpdateRepository.Add(PendingReadModelUpdate.Create(domainEvent.Entity.Id, PendingReadModelUpdateSourceCategory.ItSystemUsage_Contract));
128+
}
129+
130+
public void Handle(ContractDeleted domainEvent)
131+
{
132+
_pendingReadModelUpdateRepository.Add(PendingReadModelUpdate.Create(domainEvent.DeletedContract.Id, PendingReadModelUpdateSourceCategory.ItSystemUsage_Contract));
133+
}
134+
121135
public void Handle(EntityDeletedEvent<ExternalReference> domainEvent) => HandleExternalReference(domainEvent);
122136

123137
public void Handle(EntityCreatedEvent<ExternalReference> domainEvent) => HandleExternalReference(domainEvent);

Core.DomainServices/SystemUsage/ItSystemUsageOverviewReadModelUpdate.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ public void Apply(ItSystemUsage source, ItSystemUsageOverviewReadModel destinati
5454
PatchItSystemRightsHolder(source, destination);
5555
PatchKLE(source, destination);
5656
PatchReference(source, destination);
57+
PatchMainContract(source, destination);
58+
}
59+
60+
private static void PatchMainContract(ItSystemUsage source, ItSystemUsageOverviewReadModel destination)
61+
{
62+
destination.MainContractId = source.MainContract?.ItContractId;
63+
destination.MainContractName = source.MainContract?.ItContract.Name;
64+
65+
destination.MainContractSupplierId = source.MainContract?.ItContract.Supplier?.Id;
66+
destination.MainContractSupplierName = source.MainContract?.ItContract.Supplier?.Name;
5767
}
5868

5969
private static void PatchReference(ItSystemUsage source, ItSystemUsageOverviewReadModel destination)

Infrastructure.DataAccess/Infrastructure.DataAccess.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -670,9 +670,9 @@
670670
<Compile Include="Migrations\202104071049413_Contract_Remove_DataHandler.designer.cs">
671671
<DependentUpon>202104071049413_Contract_Remove_DataHandler.cs</DependentUpon>
672672
</Compile>
673-
<Compile Include="Migrations\202104190846204_Add_ItSystemUsageOverviewReadModel.cs" />
674-
<Compile Include="Migrations\202104190846204_Add_ItSystemUsageOverviewReadModel.designer.cs">
675-
<DependentUpon>202104190846204_Add_ItSystemUsageOverviewReadModel.cs</DependentUpon>
673+
<Compile Include="Migrations\202104190852172_Add_ItSystemUsageOverviewReadModel.cs" />
674+
<Compile Include="Migrations\202104190852172_Add_ItSystemUsageOverviewReadModel.designer.cs">
675+
<DependentUpon>202104190852172_Add_ItSystemUsageOverviewReadModel.cs</DependentUpon>
676676
</Compile>
677677
<Compile Include="Migrations\Configuration.cs" />
678678
<Compile Include="Mapping\TerminationDeadlineTypeMap.cs" />
@@ -1097,8 +1097,8 @@
10971097
<EmbeddedResource Include="Migrations\202104071049413_Contract_Remove_DataHandler.resx">
10981098
<DependentUpon>202104071049413_Contract_Remove_DataHandler.cs</DependentUpon>
10991099
</EmbeddedResource>
1100-
<EmbeddedResource Include="Migrations\202104190846204_Add_ItSystemUsageOverviewReadModel.resx">
1101-
<DependentUpon>202104190846204_Add_ItSystemUsageOverviewReadModel.cs</DependentUpon>
1100+
<EmbeddedResource Include="Migrations\202104190852172_Add_ItSystemUsageOverviewReadModel.resx">
1101+
<DependentUpon>202104190852172_Add_ItSystemUsageOverviewReadModel.cs</DependentUpon>
11021102
</EmbeddedResource>
11031103
<EmbeddedResource Include="Migrations\SQLScripts\Migrate_Contract_Relations.sql" />
11041104
<EmbeddedResource Include="Migrations\SQLScripts\Migrate_System_Url.sql" />

Infrastructure.DataAccess/Mapping/ItSystemUsageOverviewReadModelMap.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Data.Entity.ModelConfiguration;
22
using Core.DomainModel;
3+
using Core.DomainModel.ItContract;
34
using Core.DomainModel.ItSystem;
45
using Core.DomainModel.ItSystemUsage;
56
using Core.DomainModel.ItSystemUsage.Read;
@@ -80,6 +81,20 @@ public ItSystemUsageOverviewReadModelMap()
8081
.HasMaxLength(UserConstraints.MaxNameLength)
8182
.HasIndexAnnotation("ItSystemUsageOverviewReadModel_Index_LastChangedByName", 0);
8283

84+
Property(x => x.MainContractId)
85+
.HasIndexAnnotation("ItSystemUsageOverviewReadModel_Index_MainContractId", 0);
86+
87+
Property(x => x.MainContractName)
88+
.HasMaxLength(ItContractConstraints.MaxNameLength)
89+
.HasIndexAnnotation("ItSystemUsageOverviewReadModel_Index_MainContractName", 0);
90+
91+
Property(x => x.MainContractSupplierId)
92+
.HasIndexAnnotation("ItSystemUsageOverviewReadModel_Index_MainContractSupplierId", 0);
93+
94+
Property(x => x.MainContractSupplierName)
95+
.HasMaxLength(Organization.MaxNameLength)
96+
.HasIndexAnnotation("ItSystemUsageOverviewReadModel_Index_MainContractSupplierName", 0);
97+
8398

8499
//No index bc we don't know how long it might be
85100
Property(x => x.ItSystemKLEIdsAsCsv).IsOptional();

Infrastructure.DataAccess/Migrations/202104190846204_Add_ItSystemUsageOverviewReadModel.resx

Lines changed: 0 additions & 126 deletions
This file was deleted.

0 commit comments

Comments
 (0)