From c5602f08118be4633662b76b00b2b0cd848b24e1 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Oct 2024 09:09:09 +0200 Subject: [PATCH] more json utils --- app_cv_firestore/lib/app_cv_firestore_v2.dart | 8 ++++ app_cv_firestore/lib/src/v2/json_utils.dart | 43 +++++++++++++++++++ .../test/app_cv_firestore_v2_test.dart | 34 +++++++++------ 3 files changed, 71 insertions(+), 14 deletions(-) create mode 100644 app_cv_firestore/lib/src/v2/json_utils.dart diff --git a/app_cv_firestore/lib/app_cv_firestore_v2.dart b/app_cv_firestore/lib/app_cv_firestore_v2.dart index 0c59016..e9b0c7b 100644 --- a/app_cv_firestore/lib/app_cv_firestore_v2.dart +++ b/app_cv_firestore/lib/app_cv_firestore_v2.dart @@ -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; @@ -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; diff --git a/app_cv_firestore/lib/src/v2/json_utils.dart b/app_cv_firestore/lib/src/v2/json_utils.dart new file mode 100644 index 0000000..62f972c --- /dev/null +++ b/app_cv_firestore/lib/src/v2/json_utils.dart @@ -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(Model infoJson) { + var docInfo = FirestoreDocumentInfo.fromJsonMap(infoJson); + var doc = docInfo.data.asMap().cv()..path = docInfo.path; + return doc; +} + +/// info json list to document list +List infoJsonListToDocumentList( + List infoJsonList) { + return infoJsonList + .map((infoJson) => infoJsonToDocument(infoJson)) + .toList(); +} + +/// Helpers +extension TekartikCvFirestoreDocumentSnapshotListInfoJsonListExt + on List { + List 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 { + List toInfoJsonList() { + return map((document) => document.toInfoJson()).toList(); + } +} diff --git a/app_cv_firestore/test/app_cv_firestore_v2_test.dart b/app_cv_firestore/test/app_cv_firestore_v2_test.dart index 06cbbd4..15b6956 100644 --- a/app_cv_firestore/test/app_cv_firestore_v2_test.dart +++ b/app_cv_firestore/test/app_cv_firestore_v2_test.dart @@ -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('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(infoJsonList) + .toInfoJsonList(), + infoJsonList); }); test('root', () { expect(cvRootDocumentReference.path, '');