Skip to content

Commit c0d9823

Browse files
authored
BC-11196 Optimize CTL tool activation (#6062)
1 parent 56d25b8 commit c0d9823

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

apps/server/src/modules/tool/school-external-tool/repo/mikro-orm/school-external-tool.repo.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@ export class SchoolExternalToolRepo {
8787
return dos;
8888
}
8989

90+
public async saveMany(domainObjects: SchoolExternalTool[]): Promise<void> {
91+
const entities = domainObjects.map((domainObject) => {
92+
const entityProps = this.mapDomainObjectToEntityProps(domainObject);
93+
return new SchoolExternalToolEntity(entityProps);
94+
});
95+
96+
await this.em.upsertMany(SchoolExternalToolEntity, entities);
97+
}
98+
9099
private buildScope(query: SchoolExternalToolQuery): SchoolExternalToolScope {
91100
const scope: SchoolExternalToolScope = new SchoolExternalToolScope();
92101

apps/server/src/modules/tool/school-external-tool/service/school-external-tool.service.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -139,27 +139,28 @@ export class SchoolExternalToolService {
139139

140140
public async addAndActivateToolForAllSchools(toolId: EntityId): Promise<void> {
141141
const allSchoolIds = await this.schoolService.getAllSchoolIds();
142-
const existingSchoolExternalTools = await this.schoolExternalToolRepo.findByExternalToolId(toolId);
143142

144-
existingSchoolExternalTools.forEach((tool) => tool.activate());
145-
const updatePromises = existingSchoolExternalTools.map((tool) => this.schoolExternalToolRepo.save(tool));
146-
await Promise.all(updatePromises);
143+
const existingDeactivatedSchoolExternalTools = await this.schoolExternalToolRepo.find({
144+
toolId,
145+
isDeactivated: true,
146+
});
147+
existingDeactivatedSchoolExternalTools.forEach((tool) => tool.activate());
148+
await this.schoolExternalToolRepo.saveMany(existingDeactivatedSchoolExternalTools);
147149

148-
const schoolIdsWhereExisting = existingSchoolExternalTools.map((tool) => tool.schoolId);
149-
const schoolIdsWhereNotExisting = allSchoolIds.filter((schoolId) => !schoolIdsWhereExisting.includes(schoolId));
150-
const createPromises = schoolIdsWhereNotExisting.map((schoolId) => this.createSchoolExternalTool(toolId, schoolId));
151-
await Promise.all(createPromises);
150+
const existingSchoolExternalTools = await this.schoolExternalToolRepo.findByExternalToolId(toolId);
151+
const schoolIdsWhereExisting = new Set(existingSchoolExternalTools.map((tool) => tool.schoolId));
152+
const schoolIdsWhereNotExisting = allSchoolIds.filter((schoolId) => !schoolIdsWhereExisting.has(schoolId));
153+
const toolsToAdd = schoolIdsWhereNotExisting.map((schoolId) => this.createSchoolExternalTool(toolId, schoolId));
154+
await this.schoolExternalToolRepo.saveMany(toolsToAdd);
152155
}
153156

154-
private createSchoolExternalTool(toolId: EntityId, schoolId: EntityId): Promise<SchoolExternalTool> {
155-
const schoolExternalTool = new SchoolExternalTool({
157+
private createSchoolExternalTool(toolId: EntityId, schoolId: EntityId): SchoolExternalTool {
158+
return new SchoolExternalTool({
156159
id: new ObjectId().toHexString(),
157160
toolId,
158161
schoolId,
159162
parameters: [],
160163
isDeactivated: false,
161164
});
162-
163-
return this.schoolExternalToolRepo.save(schoolExternalTool);
164165
}
165166
}

0 commit comments

Comments
 (0)