@@ -1990,3 +1990,67 @@ void checkPackageVersionParams(String package, [String? version]) {
1990
1990
}
1991
1991
}
1992
1992
}
1993
+
1994
+ /// Low-level, narrowly typed data access methods for [Package] entity.
1995
+ extension PackageDatastoreDBExt on DatastoreDB {
1996
+ _PackageDataAccess get packages => _PackageDataAccess (this );
1997
+ }
1998
+
1999
+ extension PackageTransactionWrapperExt on TransactionWrapper {
2000
+ _PackageTransactionDataAcccess get packages =>
2001
+ _PackageTransactionDataAcccess (this );
2002
+
2003
+ _VersionTransactionDataAcccess get versions =>
2004
+ _VersionTransactionDataAcccess (this );
2005
+ }
2006
+
2007
+ final class _PackageDataAccess {
2008
+ final DatastoreDB _db;
2009
+
2010
+ _PackageDataAccess (this ._db);
2011
+
2012
+ Future <bool > exists (String name) async {
2013
+ final packageKey = _db.emptyKey.append (Package , id: name);
2014
+ final package = await _db.lookupOrNull <Package >(packageKey);
2015
+ return package != null ;
2016
+ }
2017
+
2018
+ Stream <({String name})> listAllNames () async * {
2019
+ final query = _db.query <Package >();
2020
+ await for (final p in query.run ()) {
2021
+ yield (name: p.name! );
2022
+ }
2023
+ }
2024
+
2025
+ Stream <({String name, DateTime updated})> listUpdatedSince (
2026
+ DateTime since) async * {
2027
+ final query = _db.query <Package >()
2028
+ ..filter ('updated >' , since)
2029
+ ..order ('-updated' );
2030
+ await for (final p in query.run ()) {
2031
+ yield (name: p.name! , updated: p.updated! );
2032
+ }
2033
+ }
2034
+ }
2035
+
2036
+ class _PackageTransactionDataAcccess {
2037
+ final TransactionWrapper _tx;
2038
+
2039
+ _PackageTransactionDataAcccess (this ._tx);
2040
+
2041
+ Future <Package ?> lookupOrNull (String name) async {
2042
+ final pkgKey = _tx.emptyKey.append (Package , id: name);
2043
+ return await _tx.lookupOrNull <Package >(pkgKey);
2044
+ }
2045
+ }
2046
+
2047
+ class _VersionTransactionDataAcccess {
2048
+ final TransactionWrapper _tx;
2049
+
2050
+ _VersionTransactionDataAcccess (this ._tx);
2051
+
2052
+ Future <List <PackageVersion >> listVersionsOfPackage (String name) async {
2053
+ final pkgKey = _tx.emptyKey.append (Package , id: name);
2054
+ return await _tx.query <PackageVersion >(pkgKey).run ().toList ();
2055
+ }
2056
+ }
0 commit comments