feat: Use execute in parallel for faster request time

This commit is contained in:
dab246
2026-02-10 14:15:34 +07:00
committed by Dat H. Pham
parent add55a9d55
commit a70a338608
+37 -37
View File
@@ -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,
); );
} }
} }