Skip to content

Commit

Permalink
fix: Fixed a bug that did not work properly in the case of Web x Fire…
Browse files Browse the repository at this point in the history
…store.
  • Loading branch information
mathrunet committed Aug 10, 2023
1 parent 2d2dafd commit 838e5fb
Show file tree
Hide file tree
Showing 26 changed files with 1,675 additions and 110 deletions.
70 changes: 51 additions & 19 deletions packages/katana_model/lib/src/model_field_value.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ abstract class ModelFieldValueConverter<T extends ModelFieldValue> {
/// Type of class being handled.
///
/// 扱うクラスのタイプ。
Type get type => T;
String get type;

/// Returns `true` if the given [value] type matches [type].
///
Expand Down Expand Up @@ -60,7 +60,7 @@ abstract class ModelFieldValueFilter<T extends ModelFieldValue> {
/// Type of class being handled.
///
/// 扱うクラスのタイプ。
Type get type => T;
String get type;

/// Comparison operator for sorting.
///
Expand Down Expand Up @@ -198,8 +198,7 @@ abstract class ModelFieldValue<T> {
res[key] = val;
} else if (val is DynamicMap && val.containsKey(kTypeFieldKey)) {
final type = val.get(kTypeFieldKey, "");
final conveter =
_converters.firstWhereOrNull((e) => e.type.toString() == type);
final conveter = _converters.firstWhereOrNull((e) => e.type == type);
if (conveter != null) {
res[key] = conveter.fromJson(val);
} else {
Expand Down Expand Up @@ -507,6 +506,11 @@ class ModelCounter extends ModelFieldValue<int>
_increment = increment,
_source = source;

/// Type key.
///
/// タイプのキー。
static const typeString = "ModelCounter";

/// Key to store the value.
///
/// 値を保存しておくキー。
Expand Down Expand Up @@ -550,7 +554,7 @@ class ModelCounter extends ModelFieldValue<int>

@override
DynamicMap toJson() => {
kTypeFieldKey: (ModelCounter).toString(),
kTypeFieldKey: ModelCounter.typeString,
kValueKey: value,
kIncrementKey: incrementValue,
kSourceKey: _source.name,
Expand Down Expand Up @@ -625,6 +629,9 @@ class ModelCounterConverter extends ModelFieldValueConverter<ModelCounter> {
/// [ModelCounter][ModelFieldValue]として自動変換できるようにするための[ModelFieldValueConverter]
const ModelCounterConverter();

@override
String get type => ModelCounter.typeString;

@override
ModelCounter fromJson(Map<String, Object?> map) {
return ModelCounter.fromJson(map);
Expand All @@ -646,6 +653,9 @@ class ModelCounterFilter extends ModelFieldValueFilter<ModelCounter> {
/// [ModelCounter][ModelQuery.filters]で利用できるようにするためのフィルタークラス。
const ModelCounterFilter();

@override
String get type => ModelCounter.typeString;

@override
int? compare(dynamic a, dynamic b) {
return _hasMatch(a, b, (a, b) => a.compareTo(b));
Expand Down Expand Up @@ -722,16 +732,16 @@ class ModelCounterFilter extends ModelFieldValueFilter<ModelCounter> {
return filter(source, target.value);
} else if (source is ModelCounter &&
target is DynamicMap &&
target.get(kTypeFieldKey, "") == (ModelCounter).toString()) {
target.get(kTypeFieldKey, "") == ModelCounter.typeString) {
return filter(source.value, ModelCounter.fromJson(target).value);
} else if (source is DynamicMap &&
target is ModelCounter &&
source.get(kTypeFieldKey, "") == (ModelCounter).toString()) {
source.get(kTypeFieldKey, "") == ModelCounter.typeString) {
return filter(ModelCounter.fromJson(source).value, target.value);
} else if (source is DynamicMap &&
target is DynamicMap &&
source.get(kTypeFieldKey, "") == (ModelCounter).toString() &&
target.get(kTypeFieldKey, "") == (ModelCounter).toString()) {
source.get(kTypeFieldKey, "") == ModelCounter.typeString &&
target.get(kTypeFieldKey, "") == ModelCounter.typeString) {
return filter(ModelCounter.fromJson(source).value,
ModelCounter.fromJson(target).value);
}
Expand Down Expand Up @@ -830,6 +840,11 @@ class ModelTimestamp extends ModelFieldValue<DateTime>
]) : _value = value,
_source = source;

/// Type key.
///
/// タイプのキー。
static const typeString = "ModelTimestamp";

/// Key to save time.
///
/// 時間を保存しておくキー。
Expand Down Expand Up @@ -858,7 +873,7 @@ class ModelTimestamp extends ModelFieldValue<DateTime>

@override
DynamicMap toJson() => {
kTypeFieldKey: (ModelTimestamp).toString(),
kTypeFieldKey: ModelTimestamp.typeString,
kTimeKey: value.millisecondsSinceEpoch,
kNowKey: _value == null,
kSourceKey: _source.name,
Expand Down Expand Up @@ -970,6 +985,9 @@ class ModelTimestampConverter extends ModelFieldValueConverter<ModelTimestamp> {
/// [ModelTimestamp][ModelFieldValue]として自動変換できるようにするための[ModelFieldValueConverter]
const ModelTimestampConverter();

@override
String get type => ModelTimestamp.typeString;

@override
ModelTimestamp fromJson(Map<String, Object?> map) {
return ModelTimestamp.fromJson(map);
Expand All @@ -991,6 +1009,9 @@ class ModelTimestampFilter extends ModelFieldValueFilter<ModelTimestamp> {
/// [ModelTimestamp][ModelQuery.filters]で利用できるようにするためのフィルタークラス。
const ModelTimestampFilter();

@override
String get type => ModelTimestamp.typeString;

@override
int? compare(dynamic a, dynamic b) {
return _hasMatch(a, b, (a, b) => a.compareTo(b));
Expand Down Expand Up @@ -1074,19 +1095,19 @@ class ModelTimestampFilter extends ModelFieldValueFilter<ModelTimestamp> {
return filter(source, target.value.millisecondsSinceEpoch);
} else if (source is ModelTimestamp &&
target is DynamicMap &&
target.get(kTypeFieldKey, "") == (ModelTimestamp).toString()) {
target.get(kTypeFieldKey, "") == ModelTimestamp.typeString) {
return filter(source.value.millisecondsSinceEpoch,
ModelTimestamp.fromJson(target).value.millisecondsSinceEpoch);
} else if (source is DynamicMap &&
target is ModelTimestamp &&
source.get(kTypeFieldKey, "") == (ModelTimestamp).toString()) {
source.get(kTypeFieldKey, "") == ModelTimestamp.typeString) {
return filter(
ModelTimestamp.fromJson(source).value.millisecondsSinceEpoch,
target.value.millisecondsSinceEpoch);
} else if (source is DynamicMap &&
target is DynamicMap &&
source.get(kTypeFieldKey, "") == (ModelTimestamp).toString() &&
target.get(kTypeFieldKey, "") == (ModelTimestamp).toString()) {
source.get(kTypeFieldKey, "") == ModelTimestamp.typeString &&
target.get(kTypeFieldKey, "") == ModelTimestamp.typeString) {
return filter(
ModelTimestamp.fromJson(source).value.millisecondsSinceEpoch,
ModelTimestamp.fromJson(target).value.millisecondsSinceEpoch);
Expand Down Expand Up @@ -1146,6 +1167,11 @@ class ModelSearch extends ModelFieldValue<List<String>>
]) : _value = value,
_source = source;

/// Type key.
///
/// タイプのキー。
static const typeString = "ModelSearch";

/// Key to save the list.
///
/// リストを保存しておくキー。
Expand All @@ -1169,7 +1195,7 @@ class ModelSearch extends ModelFieldValue<List<String>>

@override
DynamicMap toJson() => {
kTypeFieldKey: (ModelSearch).toString(),
kTypeFieldKey: ModelSearch.typeString,
kListKey: value,
kSourceKey: _source.name,
};
Expand Down Expand Up @@ -1212,6 +1238,9 @@ class ModelSearchConverter extends ModelFieldValueConverter<ModelSearch> {
/// [ModelSearch][ModelFieldValue]として自動変換できるようにするための[ModelFieldValueConverter]
const ModelSearchConverter();

@override
String get type => ModelSearch.typeString;

@override
ModelSearch fromJson(Map<String, Object?> map) {
return ModelSearch.fromJson(map);
Expand All @@ -1233,6 +1262,9 @@ class ModelSearchFilter extends ModelFieldValueFilter<ModelSearch> {
/// [ModelSearch][ModelQuery.filters]で利用できるようにするためのフィルタークラス。
const ModelSearchFilter();

@override
String get type => ModelSearch.typeString;

@override
int? compare(dynamic a, dynamic b) {
return _hasMatch(a, b, (a, b) => a.toString().compareTo(b.toString()));
Expand Down Expand Up @@ -1298,16 +1330,16 @@ class ModelSearchFilter extends ModelFieldValueFilter<ModelSearch> {
return filter([source], target.value);
} else if (source is ModelSearch &&
target is DynamicMap &&
target.get(kTypeFieldKey, "") == (ModelSearch).toString()) {
target.get(kTypeFieldKey, "") == ModelSearch.typeString) {
return filter(source.value, ModelSearch.fromJson(target).value);
} else if (source is DynamicMap &&
target is ModelSearch &&
source.get(kTypeFieldKey, "") == (ModelSearch).toString()) {
source.get(kTypeFieldKey, "") == ModelSearch.typeString) {
return filter(ModelSearch.fromJson(source).value, target.value);
} else if (source is DynamicMap &&
target is DynamicMap &&
source.get(kTypeFieldKey, "") == (ModelSearch).toString() &&
target.get(kTypeFieldKey, "") == (ModelSearch).toString()) {
source.get(kTypeFieldKey, "") == ModelSearch.typeString &&
target.get(kTypeFieldKey, "") == ModelSearch.typeString) {
return filter(ModelSearch.fromJson(source).value,
ModelSearch.fromJson(target).value);
}
Expand Down
25 changes: 18 additions & 7 deletions packages/katana_model/lib/src/model_geo_value.dart
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ class ModelGeoValue extends ModelFieldValue<GeoValue>
]) : _value = value,
_source = source;

/// Type key.
///
/// タイプのキー。
static const typeString = "ModelGeoValue";

/// Key to save latitude.
///
/// 緯度を保存しておくキー。
Expand Down Expand Up @@ -105,7 +110,7 @@ class ModelGeoValue extends ModelFieldValue<GeoValue>

@override
DynamicMap toJson() => {
kTypeFieldKey: (ModelGeoValue).toString(),
kTypeFieldKey: ModelGeoValue.typeString,
kLatitudeKey: value.latitude,
kLongitudeKey: value.longitude,
kGeoHashKey: value.geoHash,
Expand Down Expand Up @@ -167,6 +172,9 @@ class ModelGeoValueConverter extends ModelFieldValueConverter<ModelGeoValue> {
/// [ModelGeoValue][ModelFieldValue]として自動変換できるようにするための[ModelFieldValueConverter]
const ModelGeoValueConverter();

@override
String get type => ModelGeoValue.typeString;

@override
ModelGeoValue fromJson(Map<String, Object?> map) {
return ModelGeoValue.fromJson(map);
Expand All @@ -188,6 +196,9 @@ class ModelGeoValueFilter extends ModelFieldValueFilter<ModelGeoValue> {
/// [ModelGeoValue][ModelQuery.filters]で利用できるようにするためのフィルタークラス。
const ModelGeoValueFilter();

@override
String get type => ModelGeoValue.typeString;

@override
int? compare(dynamic a, dynamic b) {
return _hasMatch(a, b, (a, b) => a.compareTo(b));
Expand Down Expand Up @@ -274,28 +285,28 @@ class ModelGeoValueFilter extends ModelFieldValueFilter<ModelGeoValue> {
return filter(source, target.value.geoHash);
} else if (source is ModelGeoValue &&
target is DynamicMap &&
target.get(kTypeFieldKey, "") == (ModelGeoValue).toString()) {
target.get(kTypeFieldKey, "") == ModelGeoValue.typeString) {
return filter(
source.value.geoHash, ModelGeoValue.fromJson(target).value.geoHash);
} else if (source is DynamicMap &&
target is ModelGeoValue &&
source.get(kTypeFieldKey, "") == (ModelGeoValue).toString()) {
source.get(kTypeFieldKey, "") == ModelGeoValue.typeString) {
return filter(
ModelGeoValue.fromJson(source).value.geoHash, target.value.geoHash);
} else if (source is GeoValue &&
target is DynamicMap &&
target.get(kTypeFieldKey, "") == (ModelGeoValue).toString()) {
target.get(kTypeFieldKey, "") == ModelGeoValue.typeString) {
return filter(
source.geoHash, ModelGeoValue.fromJson(target).value.geoHash);
} else if (source is DynamicMap &&
target is GeoValue &&
source.get(kTypeFieldKey, "") == (ModelGeoValue).toString()) {
source.get(kTypeFieldKey, "") == ModelGeoValue.typeString) {
return filter(
ModelGeoValue.fromJson(source).value.geoHash, target.geoHash);
} else if (source is DynamicMap &&
target is DynamicMap &&
source.get(kTypeFieldKey, "") == (ModelGeoValue).toString() &&
target.get(kTypeFieldKey, "") == (ModelGeoValue).toString()) {
source.get(kTypeFieldKey, "") == ModelGeoValue.typeString &&
target.get(kTypeFieldKey, "") == ModelGeoValue.typeString) {
return filter(
ModelGeoValue.fromJson(source).value.geoHash,
ModelGeoValue.fromJson(target).value.geoHash,
Expand Down
Loading

0 comments on commit 838e5fb

Please sign in to comment.