Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/dart3a' into dart3a
Browse files Browse the repository at this point in the history
  • Loading branch information
alextekartik committed Oct 4, 2024
2 parents 997f141 + c5602f0 commit ad6b3d2
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 14 deletions.
8 changes: 8 additions & 0 deletions app_cv_firestore/lib/app_cv_firestore_v2.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ library;

export 'package:cv/cv.dart';
export 'package:tekartik_firebase_firestore/firestore.dart';

export 'src/v2/builder.dart' show cvFirestoreAddBuilder;
export 'src/v2/cv_collection_reference.dart'
show CvCollectionReference, CollectionReferenceCvExtension;
Expand Down Expand Up @@ -32,5 +33,12 @@ export 'src/v2/firestore_extension.dart'
CvFirestoreQueryExt,
CvFirestoreWriteBatch,
CvFirestoreTransaction;
export 'src/v2/json_utils.dart'
show
infoJsonListToDocumentList,
infoJsonToDocument,
TekartikCvFirestoreDocumentSnapshotListInfoJsonListExt,
TekartikCvFirestoreCvDocumentInfoJsonExt,
TekartikCvFirestoreCvDocumentListInfoJsonListExt;
export 'src/v2/map_extension.dart'
show AppCvFirestoreFieldMapExt, WithServerTimestampMixin;
43 changes: 43 additions & 0 deletions app_cv_firestore/lib/src/v2/json_utils.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import 'package:tekartik_app_cv_firestore/app_cv_firestore.dart';
import 'package:tekartik_firebase_firestore/utils/json_utils.dart';

/// info json list to document list
T infoJsonToDocument<T extends CvFirestoreDocument>(Model infoJson) {
var docInfo = FirestoreDocumentInfo.fromJsonMap(infoJson);
var doc = docInfo.data.asMap().cv<T>()..path = docInfo.path;
return doc;
}

/// info json list to document list
List<T> infoJsonListToDocumentList<T extends CvFirestoreDocument>(
List<Model> infoJsonList) {
return infoJsonList
.map((infoJson) => infoJsonToDocument<T>(infoJson))
.toList();
}

/// Helpers
extension TekartikCvFirestoreDocumentSnapshotListInfoJsonListExt
on List<DocumentSnapshot> {
List<Model> toInfoJsonList() {
return map((snapshot) =>
FirestoreDocumentInfo.fromDocumentSnapshot(snapshot).toJsonMap())
.toList();
}
}

/// Helpers
extension TekartikCvFirestoreCvDocumentInfoJsonExt on CvFirestoreDocument {
Model toInfoJson() {
return FirestoreDocumentInfo(path: ref.path, data: DocumentData(toMap()))
.toJsonMap();
}
}

/// Helpers
extension TekartikCvFirestoreCvDocumentListInfoJsonListExt
on List<CvFirestoreDocument> {
List<Model> toInfoJsonList() {
return map((document) => document.toInfoJson()).toList();
}
}
34 changes: 20 additions & 14 deletions app_cv_firestore/test/app_cv_firestore_v2_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -404,20 +404,26 @@ void main() {
{'value': 1, 'timestamp': FieldValue.serverTimestamp});
});

test('fillModel', () async {
var allFields = CvFsAllFields()..fillModel(cvFirestoreFillOptions1);
expect(allFields.toMap(), {
'int': 1,
'double': 2.5,
'bool': false,
'string': 'text_4',
'timestamp': Timestamp.parse('1970-01-01T00:00:05.000Z'),
'intList': [6],
'model': {'text': 'text_7'},
'modelList': {'text': 'text_8'},
'map': {'value': 9},
'blob': Blob.fromList([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
});
test('jsonInfoList', () async {
var collection = CvCollectionReference<CvFsSingleString>('test');
cvAddConstructor(CvFsSingleString.new);
var docRef = collection.doc('1');
expect(docRef.path, 'test/1');
var doc = docRef.cv()..text.v = 'value';
await firestore.cvSet(doc);
var list = await collection.raw(firestore).get();
var infoJsonList = list.docs.toInfoJsonList();
expect(infoJsonList, [
{
'path': 'test/1',
'data': {'text': 'value'}
}
]);
expect((await collection.get(firestore)).toInfoJsonList(), infoJsonList);
expect(
infoJsonListToDocumentList<CvFsSingleString>(infoJsonList)
.toInfoJsonList(),
infoJsonList);
});
test('root', () {
expect(cvRootDocumentReference.path, '');
Expand Down

0 comments on commit ad6b3d2

Please sign in to comment.