Skip to content

Commit

Permalink
fix: Added InitialDocument.
Browse files Browse the repository at this point in the history
  • Loading branch information
mathrunet committed Aug 4, 2023
1 parent ad7c250 commit 3551ba9
Show file tree
Hide file tree
Showing 9 changed files with 220 additions and 106 deletions.
18 changes: 13 additions & 5 deletions packages/katana_model/lib/adapter/runtime_model_adapter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,20 @@ class RuntimeModelAdapter extends ModelAdapter {
final database = _database ?? sharedDatabase;
if (initialValue.isNotEmpty && !database.isInitialValueRegistered) {
for (final raw in initialValue!) {
for (final tmp in raw.value.entries) {
final map = raw.toMap(tmp.value);
if (raw is ModelInitialDocument) {
final map = raw.toMap(raw.value);
database.setInitialValue(
_path("${raw.path}/${tmp.key}"),
raw.filterOnSave(map, tmp.value),
_path(raw.path),
raw.filterOnSave(map, raw.value),
);
} else if (raw is ModelInitialCollection) {
for (final tmp in raw.value.entries) {
final map = raw.toMap(tmp.value);
database.setInitialValue(
_path("${raw.path}/${tmp.key}"),
raw.filterOnSave(map, tmp.value),
);
}
}
}
}
Expand All @@ -81,7 +89,7 @@ class RuntimeModelAdapter extends ModelAdapter {
/// Actual data when used as a mock-up.
///
/// モックアップとして利用する際の実データ。
final List<ModelInitialCollection>? initialValue;
final List<ModelInitialValue>? initialValue;

/// Path prefix.
///
Expand Down
2 changes: 1 addition & 1 deletion packages/katana_model/lib/katana_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,4 @@ part 'src/listenable_listener.dart';
part 'src/model_transaction.dart';
part 'src/model_field_value.dart';
part 'src/model_geo_value.dart';
part 'src/model_initial_collection.dart';
part 'src/model_initial_value.dart';
83 changes: 0 additions & 83 deletions packages/katana_model/lib/src/model_initial_collection.dart

This file was deleted.

165 changes: 165 additions & 0 deletions packages/katana_model/lib/src/model_initial_value.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
part of katana_model;

/// {@template model_initial_value}
/// Base class for data to be passed to various [ModelAdapter] `data`.
///
/// You can parse for Json by using [toMap].
///
/// 各種[ModelAdapter]`data`に渡すデータの基底クラス。
///
/// [toMap]を利用することでJson用にパースすることができます。
/// {@endtemplate}
abstract class ModelInitialValue<T> {
/// {@template model_initial_value}
/// Base class for data to be passed to various [ModelAdapter] `data`.
///
/// You can parse for Json by using [toMap].
///
/// 各種[ModelAdapter]`data`に渡すデータの基底クラス。
///
/// [toMap]を利用することでJson用にパースすることができます。
/// {@endtemplate}
const ModelInitialValue();

/// Path to the collection itself.
///
/// コレクション自体のパス。
String get path;

/// Parse for Json.
///
/// Json用にパースする。
DynamicMap toMap(T value);

/// Methods for filtering data as it is stored.
///
/// Each element after being [toMap] and its corresponding [value] are passed to [rawData], so rewrite [rawData] and return it.
///
/// データが保存される際にデータをフィルタリングするためのメソッド。
///
/// [rawData][toMap]されたあとの各要素とそれに対応する[value]が渡されるので[rawData]を書き換えて返してください。
@mustCallSuper
DynamicMap filterOnSave(DynamicMap rawData, T value) {
return rawData;
}
}

/// {@template model_initial_document}
/// Data to be passed to `data` of various [ModelAdapter].
///
/// Specify the path of the document itself in [path] and a value in [value].
///
/// You can parse for Json by using [toMap].
///
/// 各種[ModelAdapter]`data`に渡すデータ。
///
/// [path]にドキュメント自体のパスを指定し、[value]に値を指定します。
///
/// [toMap]を利用することでJson用にパースすることができます。
/// {@endtemplate}
abstract class ModelInitialDocument<T> extends ModelInitialValue<T> {
/// {@template model_initial_document}
/// Data to be passed to `data` of various [ModelAdapter].
///
/// Specify the path of the document itself in [path] and a value in [value].
///
/// You can parse for Json by using [toMap].
///
/// 各種[ModelAdapter]`data`に渡すデータ。
///
/// [path]にドキュメント自体のパスを指定し、[value]に値を指定します。
///
/// [toMap]を利用することでJson用にパースすることができます。
/// {@endtemplate}
const ModelInitialDocument(this.value);

/// Initial value.
///
/// 初期値。
final T value;

@override
String toString() {
return value.toString();
}
}

/// {@template model_initial_collection}
/// Data to be passed to `data` of various [ModelAdapter].
///
/// Specify the path to the collection itself in [path] and the ID and value Map in [value].
///
/// You can parse for Json by using [toMap].
///
/// 各種[ModelAdapter]`data`に渡すデータ。
///
/// [path]にコレクション自体のパスを指定し、[value]にIDと値のMapを指定します。
///
/// [toMap]を利用することでJson用にパースすることができます。
/// {@endtemplate}
abstract class ModelInitialCollection<T> extends ModelInitialValue<T> {
/// {@template model_initial_collection}
/// Data to be passed to `data` of various [ModelAdapter].
///
/// Specify the path to the collection itself in [path] and the ID and value Map in [value].
///
/// You can parse for Json by using [toMap].
///
/// 各種[ModelAdapter]`data`に渡すデータ。
///
/// [path]にコレクション自体のパスを指定し、[value]にIDと値のMapを指定します。
///
/// [toMap]を利用することでJson用にパースすることができます。
/// {@endtemplate}
const ModelInitialCollection(this.value);

/// ID and value Map.
///
/// IDと値のMap。
final Map<String, T> value;

@override
String toString() {
return value.toString();
}
}

/// [ModelInitialDocument] using [DynamicMap].
///
/// [DynamicMap]を利用した[ModelInitialDocument]
///
/// {@macro model_initial_document}
class DynamicModelInitialDocument extends ModelInitialDocument<DynamicMap> {
/// [ModelInitialDocument] using [DynamicMap].
///
/// [DynamicMap]を利用した[ModelInitialDocument]
///
/// {@macro model_initial_document}
const DynamicModelInitialDocument(this.path, super.value);

@override
final String path;

@override
DynamicMap toMap(DynamicMap value) => value;
}

/// [ModelInitialCollection] using [DynamicMap].
///
/// [DynamicMap]を利用した[ModelInitialCollection]
///
/// {@macro model_initial_collection}
class DynamicModelInitialCollection extends ModelInitialCollection<DynamicMap> {
/// [ModelInitialCollection] using [DynamicMap].
///
/// [DynamicMap]を利用した[ModelInitialCollection]
///
/// {@macro model_initial_collection}
const DynamicModelInitialCollection(this.path, super.value);

@override
final String path;

@override
DynamicMap toMap(DynamicMap value) => value;
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,20 @@ class FirestoreModelAdapter extends ModelAdapter
final database = _localDatabase ?? sharedLocalDatabase;
if (initialValue.isNotEmpty && !database.isInitialValueRegistered) {
for (final raw in initialValue!) {
for (final tmp in raw.value.entries) {
final map = raw.toMap(tmp.value);
if (raw is ModelInitialDocument) {
final map = raw.toMap(raw.value);
database.setInitialValue(
_path("${raw.path}/${tmp.key}"),
raw.filterOnSave(map, tmp.value),
_path(raw.path),
raw.filterOnSave(map, raw.value),
);
} else if (raw is ModelInitialCollection) {
for (final tmp in raw.value.entries) {
final map = raw.toMap(tmp.value);
database.setInitialValue(
_path("${raw.path}/${tmp.key}"),
raw.filterOnSave(map, tmp.value),
);
}
}
}
}
Expand All @@ -119,7 +127,7 @@ class FirestoreModelAdapter extends ModelAdapter
/// Actual data when used as a mock-up.
///
/// モックアップとして利用する際の実データ。
final List<ModelInitialCollection>? initialValue;
final List<ModelInitialValue>? initialValue;

/// A special class can be registered as a [ModelFieldValue] by passing [FirestoreModelFieldValueConverter] to [converter].
///
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,20 @@ class ListenableFirestoreModelAdapter extends ModelAdapter
final database = _localDatabase ?? sharedLocalDatabase;
if (initialValue.isNotEmpty && !database.isInitialValueRegistered) {
for (final raw in initialValue!) {
for (final tmp in raw.value.entries) {
final map = raw.toMap(tmp.value);
if (raw is ModelInitialDocument) {
final map = raw.toMap(raw.value);
database.setInitialValue(
_path("${raw.path}/${tmp.key}"),
raw.filterOnSave(map, tmp.value),
_path(raw.path),
raw.filterOnSave(map, raw.value),
);
} else if (raw is ModelInitialCollection) {
for (final tmp in raw.value.entries) {
final map = raw.toMap(tmp.value);
database.setInitialValue(
_path("${raw.path}/${tmp.key}"),
raw.filterOnSave(map, tmp.value),
);
}
}
}
}
Expand All @@ -116,7 +124,7 @@ class ListenableFirestoreModelAdapter extends ModelAdapter
/// Actual data when used as a mock-up.
///
/// モックアップとして利用する際の実データ。
final List<ModelInitialCollection>? initialValue;
final List<ModelInitialValue>? initialValue;

/// A special class can be registered as a [ModelFieldValue] by passing [FirestoreModelFieldValueConverter] to [converter].
///
Expand Down
2 changes: 1 addition & 1 deletion packages/katana_model_firestore/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ packages:
path: "../katana_model"
relative: true
source: path
version: "2.10.5"
version: "2.10.7"
lints:
dependency: transitive
description:
Expand Down
Loading

0 comments on commit 3551ba9

Please sign in to comment.