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
+31 -31
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(
State? newStateLabel;
final updatedResult = await _fetchLabelsIfNeeded(
session: session, session: session,
accountId: accountId, accountId: accountId,
labelIds: updatedIds, labelIds: changes.updated.toList(),
sinceState: sinceState, sinceState: sinceState,
logPrefix: 'Updated', logPrefix: 'Updated',
); ),
if (updatedResult.notFoundIds.isNotEmpty) { _fetchLabelsIfNeeded(
destroyedLabelIds.addAll(updatedResult.notFoundIds);
}
newStateLabel = updatedResult.state ?? newStateLabel;
final createdResult = await _fetchLabelsIfNeeded(
session: session, session: session,
accountId: accountId, accountId: accountId,
labelIds: createdIds, labelIds: changes.created.toList(),
sinceState: sinceState, sinceState: sinceState,
logPrefix: 'Created', logPrefix: 'Created',
); )
if (createdResult.notFoundIds.isNotEmpty) { ]);
destroyedLabelIds.addAll(createdResult.notFoundIds);
}
newStateLabel = createdResult.state ?? newStateLabel;
log('LabelAPI::getChanges:newStateChanges = $newStateChanges | newStateLabel = $newStateLabel | hasMoreChanges = $hasMoreChanges'); final allDestroyedIds = [
log('LabelAPI::getChanges:updatedLabelSize = ${updatedResult.labels?.length} | createdLabelSize = ${createdResult.labels?.length}'); ...changes.destroyed,
log('LabelAPI::getChanges:destroyedLabelIds = $destroyedLabelIds'); ...updatedResult.notFoundIds,
...createdResult.notFoundIds,
];
final newStateLabel = createdResult.state ?? updatedResult.state;
log('LabelAPI::getChanges: '
'newStateChanges=${changes.newState} | '
'newStateLabel=$newStateLabel | '
'hasMore=${changes.hasMoreChanges}'
'updatedFetched=${updatedResult.labels?.length} | '
'createdFetched=${createdResult.labels?.length} | '
'totalDestroyed=${allDestroyedIds.length}');
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,
); );
} }
} }