fetchSince method

  1. @override
Future<Delta<T, Id>> fetchSince(
  1. SyncScope scope,
  2. DateTime? since
)
override

Implementation

@override
Future<Delta<T, Id>> fetchSince(SyncScope scope, DateTime? since) async {
  // Build PB filter string via helper for testability
  final filter = buildFetchFilter(scope, since);

  final upserts = <T>[];
  final deletes = <Id>[];

  int page = 1;
  const perPage = 100;
  while (true) {
    final list = await config.client
        .collection(config.collection)
        .getList(
          page: page,
          perPage: perPage,
          filter: filter,
          sort: config.updatedAtField,
        );
    for (final rec in list.items) {
      final data = Map<String, dynamic>.from(rec.data);
      final isDeleted =
          config.deletedAtField != null &&
          data[config.deletedAtField!] != null;
      if (isDeleted) {
        final did = config.idFromString(data[config.idField] as String);
        deletes.add(did);
      } else {
        upserts.add(config.fromJson(data));
      }
    }
    if (list.page >= list.totalPages) break;
    page += 1;
  }

  final serverTs = await getServerTime();
  return Delta<T, Id>(
    upserts: upserts,
    deletes: deletes,
    serverTimestamp: serverTs,
  );
}