-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
de551bf
commit 1e11304
Showing
7 changed files
with
214 additions
and
132 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
# tekartik strict extension | ||
include: package:tekartik_lints/strict.yaml | ||
include: package:tekartik_lints/package.yaml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
import 'package:sembast/sembast.dart'; | ||
|
||
import 'db_record.dart'; | ||
|
||
/// Query ref | ||
class CvQueryRef<K, V extends DbRecord<K>> { | ||
/// Raw ref | ||
final QueryRef<K, Map<String, Object?>> rawRef; | ||
|
||
/// Constructor | ||
CvQueryRef(this.rawRef); | ||
} | ||
|
||
/// Common helpers | ||
extension CvQueryRefExt<K, V extends DbRecord<K>> on CvQueryRef<K, V> { | ||
/// Get a single record | ||
Future<V?> getRecord(DatabaseClient db) async { | ||
return (await rawRef.getSnapshot(db))?.cv(); | ||
} | ||
|
||
/// Get a single record | ||
V? getRecordSync(DatabaseClient db) { | ||
return rawRef.getSnapshotSync(db)?.cv(); | ||
} | ||
|
||
/// Get all records | ||
Future<List<V>> getRecords(DatabaseClient db) async { | ||
return (await rawRef.getSnapshots(db)).cv(); | ||
} | ||
|
||
/// Get all records | ||
List<V> getRecordsSync(DatabaseClient db) { | ||
return rawRef.getSnapshotsSync(db).cv(); | ||
} | ||
|
||
/// Track changes | ||
Stream<V?> onRecord(Database db) => | ||
rawRef.onSnapshot(db).map((snapshot) => snapshot?.cv<V>()); | ||
|
||
/// Track changes | ||
Stream<List<V>> onRecords(Database db) => | ||
rawRef.onSnapshots(db).map((snapshots) => snapshots.cv<V>()); | ||
|
||
/// Track changes, first event is emitted synchronously | ||
Stream<V?> onRecordSync(Database db) => | ||
rawRef.onSnapshotSync(db).map((snapshot) => snapshot?.cv<V>()); | ||
|
||
/// Track changes, first event is emitted synchronously | ||
Stream<List<V>> onRecordsSync(Database db) => | ||
rawRef.onSnapshotsSync(db).map((snapshots) => snapshots.cv<V>()); | ||
|
||
/// Count | ||
Future<int> count(DatabaseClient db) => rawRef.count(db); | ||
|
||
/// Count sync | ||
int countSync(DatabaseClient db) => rawRef.countSync(db); | ||
|
||
/// onCount | ||
Stream<int> onCount(Database db) => rawRef.onCount(db); | ||
|
||
/// onCountSync | ||
Stream<int> onCountSync(Database db) => rawRef.onCountSync(db); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
import 'package:sembast/sembast.dart'; | ||
|
||
import 'cv_query_ref.dart'; | ||
import 'db_record.dart'; | ||
|
||
var _mainStore = intMapStoreFactory.store().name; | ||
|
||
/// Store helper | ||
class CvStoreRef<K, V extends DbRecord<K>> { | ||
/// Raw ref | ||
final StoreRef<K, Map<String, Object?>> rawRef; | ||
|
||
/// Constructor | ||
CvStoreRef(String name) : rawRef = StoreRef<K, Map<String, Object?>>(name); | ||
|
||
/// A pointer to the main store | ||
factory CvStoreRef.main() => CvStoreRef<K, V>(_mainStore); | ||
|
||
@override | ||
String toString() => 'CvStoreRef($name)'; | ||
|
||
@override | ||
int get hashCode => name.hashCode; | ||
|
||
@override | ||
bool operator ==(Object other) { | ||
if (other is CvStoreRef) { | ||
if (other.name != name) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
return false; | ||
} | ||
} | ||
|
||
/// Common helpers | ||
extension CvStoreRefExt<K, V extends DbRecord<K>> on CvStoreRef<K, V> { | ||
/// Name | ||
String get name => rawRef.name; | ||
|
||
/// Record ref | ||
CvRecordRef<K, V> record(K key) => CvRecordRef<K, V>(this, key); | ||
|
||
/// Records | ||
CvRecordsRef<K, V> records(Iterable<K> keys) => | ||
CvRecordsRef<K, V>(this, keys); | ||
|
||
/// Query | ||
CvQueryRef<K, V> query({Finder? finder}) => | ||
CvQueryRef<K, V>(rawRef.query(finder: finder)); | ||
|
||
/// Find | ||
Future<List<V>> find(DatabaseClient db, {Finder? finder}) => | ||
query(finder: finder).getRecords(db); | ||
|
||
/// Find first | ||
Future<V?> findFirst(DatabaseClient db, {Finder? finder}) => | ||
query(finder: finder).getRecord(db); | ||
|
||
/// Add | ||
Future<V> add(DatabaseClient db, V record) async { | ||
var key = await rawRef.add(db, record.toMap()); | ||
record.rawRef = rawRef.record(key); | ||
return record; | ||
} | ||
|
||
/// Delete | ||
Future<int> delete(DatabaseClient db, {Finder? finder}) async { | ||
var count = await rawRef.delete(db, finder: finder); | ||
return count; | ||
} | ||
|
||
/// Cast if needed | ||
CvStoreRef<RK, RV> cast<RK, RV extends DbRecord<RK>>() { | ||
if (this is CvStoreRef<RK, RV>) { | ||
return this as CvStoreRef<RK, RV>; | ||
} | ||
return CvStoreRef<RK, RV>(name); | ||
} | ||
|
||
/// Cast if needed | ||
CvStoreRef<K, RV> castV<RV extends DbRecord<K>>() => cast<K, RV>(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.