feat: Use execute in parallel for faster request time
This commit is contained in:
@@ -208,53 +208,53 @@ class LabelApi
|
|||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
State sinceState,
|
State sinceState,
|
||||||
) async {
|
) async {
|
||||||
final changesResult = await getLabelChanges(accountId, sinceState);
|
final changes = await getLabelChanges(accountId, sinceState);
|
||||||
|
|
||||||
final List<Id> createdIds = changesResult.created.toList();
|
log('LabelAPI::getChanges: '
|
||||||
final List<Id> updatedIds = changesResult.updated.toList();
|
'created=${changes.created.length} | '
|
||||||
List<Id> destroyedLabelIds = changesResult.destroyed.toList();
|
'updated=${changes.updated.length} | '
|
||||||
final State newStateChanges = changesResult.newState;
|
'destroyed=${changes.destroyed.length}');
|
||||||
final bool hasMoreChanges = changesResult.hasMoreChanges;
|
|
||||||
|
|
||||||
log('LabelAPI::getChanges:createdIds = ${createdIds.length} | updatedIds = ${updatedIds.length} | destroyedIds = ${destroyedLabelIds.length}');
|
final [updatedResult, createdResult] = await Future.wait([
|
||||||
|
_fetchLabelsIfNeeded(
|
||||||
|
session: session,
|
||||||
|
accountId: accountId,
|
||||||
|
labelIds: changes.updated.toList(),
|
||||||
|
sinceState: sinceState,
|
||||||
|
logPrefix: 'Updated',
|
||||||
|
),
|
||||||
|
_fetchLabelsIfNeeded(
|
||||||
|
session: session,
|
||||||
|
accountId: accountId,
|
||||||
|
labelIds: changes.created.toList(),
|
||||||
|
sinceState: sinceState,
|
||||||
|
logPrefix: 'Created',
|
||||||
|
)
|
||||||
|
]);
|
||||||
|
|
||||||
State? newStateLabel;
|
final allDestroyedIds = [
|
||||||
|
...changes.destroyed,
|
||||||
|
...updatedResult.notFoundIds,
|
||||||
|
...createdResult.notFoundIds,
|
||||||
|
];
|
||||||
|
|
||||||
final updatedResult = await _fetchLabelsIfNeeded(
|
final newStateLabel = createdResult.state ?? updatedResult.state;
|
||||||
session: session,
|
|
||||||
accountId: accountId,
|
|
||||||
labelIds: updatedIds,
|
|
||||||
sinceState: sinceState,
|
|
||||||
logPrefix: 'Updated',
|
|
||||||
);
|
|
||||||
if (updatedResult.notFoundIds.isNotEmpty) {
|
|
||||||
destroyedLabelIds.addAll(updatedResult.notFoundIds);
|
|
||||||
}
|
|
||||||
newStateLabel = updatedResult.state ?? newStateLabel;
|
|
||||||
|
|
||||||
final createdResult = await _fetchLabelsIfNeeded(
|
log('LabelAPI::getChanges: '
|
||||||
session: session,
|
'newStateChanges=${changes.newState} | '
|
||||||
accountId: accountId,
|
'newStateLabel=$newStateLabel | '
|
||||||
labelIds: createdIds,
|
'hasMore=${changes.hasMoreChanges}'
|
||||||
sinceState: sinceState,
|
'updatedFetched=${updatedResult.labels?.length} | '
|
||||||
logPrefix: 'Created',
|
'createdFetched=${createdResult.labels?.length} | '
|
||||||
);
|
'totalDestroyed=${allDestroyedIds.length}');
|
||||||
if (createdResult.notFoundIds.isNotEmpty) {
|
|
||||||
destroyedLabelIds.addAll(createdResult.notFoundIds);
|
|
||||||
}
|
|
||||||
newStateLabel = createdResult.state ?? newStateLabel;
|
|
||||||
|
|
||||||
log('LabelAPI::getChanges:newStateChanges = $newStateChanges | newStateLabel = $newStateLabel | hasMoreChanges = $hasMoreChanges');
|
|
||||||
log('LabelAPI::getChanges:updatedLabelSize = ${updatedResult.labels?.length} | createdLabelSize = ${createdResult.labels?.length}');
|
|
||||||
log('LabelAPI::getChanges:destroyedLabelIds = $destroyedLabelIds');
|
|
||||||
|
|
||||||
return LabelChangeResponse(
|
return LabelChangeResponse(
|
||||||
updated: updatedResult.labels,
|
updated: updatedResult.labels,
|
||||||
created: createdResult.labels,
|
created: createdResult.labels,
|
||||||
destroyed: destroyedLabelIds,
|
destroyed: allDestroyedIds,
|
||||||
newStateLabel: newStateLabel,
|
newStateLabel: newStateLabel,
|
||||||
newStateChanges: newStateChanges,
|
newStateChanges: changes.newState,
|
||||||
hasMoreChanges: hasMoreChanges,
|
hasMoreChanges: changes.hasMoreChanges,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user