Skip to content

Commit

Permalink
fix: Fixed a bug when processing that requires sorting by a different…
Browse files Browse the repository at this point in the history
… key.
  • Loading branch information
mathrunet committed Mar 22, 2024
1 parent bb2e477 commit a54ef68
Showing 1 changed file with 35 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,12 @@ abstract class FirestoreModelFieldValueConverter {
return null;
}
final key = filter.key!;
firestoreQuery = _fixDifferentKeys(
key,
firestoreQuery,
filter,
query,
);
firestoreQuery = firestoreQuery.orderBy(
convertQueryKey(key, filter, query, adapter),
);
Expand All @@ -281,6 +287,12 @@ abstract class FirestoreModelFieldValueConverter {
return null;
}
final key = filter.key!;
firestoreQuery = _fixDifferentKeys(
key,
firestoreQuery,
filter,
query,
);
firestoreQuery = firestoreQuery.orderBy(
convertQueryKey(key, filter, query, adapter),
descending: true,
Expand Down Expand Up @@ -394,6 +406,29 @@ abstract class FirestoreModelFieldValueConverter {
];
}
}

// 下記の不具合の修正
// https://stackoverflow.com/questions/68166318/the-initial-orderby-field-fieldpathid-true00-has-to-be-the-same
Query<DynamicMap> _fixDifferentKeys(
String key,
Query<DynamicMap> firestoreQuery,
ModelQueryFilter filter,
ModelAdapterCollectionQuery query,
) {
final filters = query.query.filters.where((item) =>
item.type == ModelQueryFilterType.isNotNull ||
item.type == ModelQueryFilterType.greaterThan ||
item.type == ModelQueryFilterType.greaterThanOrEqualTo ||
item.type == ModelQueryFilterType.lessThan ||
item.type == ModelQueryFilterType.lessThanOrEqualTo ||
item.type == ModelQueryFilterType.notEqualTo);
if (filters.isNotEmpty && !filters.any((item) => item.key == key)) {
firestoreQuery = firestoreQuery.orderBy(
convertQueryKey(filters.first.key ?? "", filter, query),
);
}
return firestoreQuery;
}
}

/// Base class for implementing [FirestoreModelAdapter].
Expand Down

0 comments on commit a54ef68

Please sign in to comment.