Future pruneTokens(resourceOwnerIdentifier)

Source

Future pruneTokens(dynamic resourceOwnerIdentifier) async {
  var oldTokenQuery = new Query<ManagedToken>(context)
    ..where.resourceOwner = whereRelatedByValue(resourceOwnerIdentifier)
    ..sortBy((t) => t.expirationDate, QuerySortOrder.descending)
    ..offset = tokenLimit
    ..fetchLimit = 1
    ..returningProperties((t) => [t.expirationDate]);

  var results = await oldTokenQuery.fetch();
  if (results.length == 1) {
    var deleteQ = new Query<ManagedToken>()
      ..where.resourceOwner = whereRelatedByValue(resourceOwnerIdentifier)
      ..where.expirationDate =
          whereLessThanEqualTo(results.first.expirationDate);

    return deleteQ.delete();
  }
}