From 7e308916db20f8e73c3a16ad36846553b1a9cb3d Mon Sep 17 00:00:00 2001 From: mathru Date: Tue, 31 Jan 2023 10:14:39 +0900 Subject: [PATCH] feat: Support for new collection queries. --- packages/masamune/example/pubspec.lock | 16 +- packages/masamune/pubspec.lock | 20 +- packages/masamune_annotation/pubspec.lock | 18 +- .../lib/model/collection_model_class.dart | 251 +++++++++++++----- packages/masamune_builder/pubspec.lock | 22 +- 5 files changed, 219 insertions(+), 108 deletions(-) diff --git a/packages/masamune/example/pubspec.lock b/packages/masamune/example/pubspec.lock index f803530e5..03475bab9 100644 --- a/packages/masamune/example/pubspec.lock +++ b/packages/masamune/example/pubspec.lock @@ -255,10 +255,10 @@ packages: dependency: transitive description: name: flutter_picker - sha256: "2b4b766fa781d8557b5b463e075aaadb7d65e941a39652037eee52ba82370c2d" + sha256: "2f94c6eefba8697b07e3cd008b75f06b4ba7053cb26d23ae0fcd5932b7dc75af" url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "2.1.0" flutter_test: dependency: "direct dev" description: flutter @@ -593,32 +593,32 @@ packages: dependency: transitive description: name: logging - sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946 + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" masamune: dependency: "direct main" description: path: ".." relative: true source: path - version: "1.3.9" + version: "1.3.10" masamune_annotation: dependency: transitive description: name: masamune_annotation - sha256: "6f1c70ae067abdf37ff440286c57d6ee7c4eb0b61a01858344f7d2b6e1ce4ce8" + sha256: fdc7068cbffafd00756f85682100456e65f6038da97bf309c78471474d2ed7d2 url: "https://pub.dev" source: hosted - version: "1.1.7" + version: "1.1.8" masamune_builder: dependency: "direct dev" description: path: "../../masamune_builder" relative: true source: path - version: "1.1.19" + version: "1.1.20" matcher: dependency: transitive description: diff --git a/packages/masamune/pubspec.lock b/packages/masamune/pubspec.lock index 948ce3d57..a9950f247 100644 --- a/packages/masamune/pubspec.lock +++ b/packages/masamune/pubspec.lock @@ -143,10 +143,10 @@ packages: dependency: transitive description: name: flutter_picker - sha256: "2b4b766fa781d8557b5b463e075aaadb7d65e941a39652037eee52ba82370c2d" + sha256: "2f94c6eefba8697b07e3cd008b75f06b4ba7053cb26d23ae0fcd5932b7dc75af" url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "2.1.0" flutter_web_plugins: dependency: transitive description: flutter @@ -300,10 +300,10 @@ packages: dependency: "direct main" description: name: katana_model - sha256: "7d2e9f35580463ad6938bfaa56e40422cd0adbffc038beff8e2a760cf0807637" + sha256: "7a5b01a9277c5189c9cd0798d2d99ade0508b14216586c5d692ce99977a0b312" url: "https://pub.dev" source: hosted - version: "1.3.26" + version: "1.4.0" katana_prefs: dependency: "direct main" description: @@ -396,18 +396,18 @@ packages: dependency: transitive description: name: logging - sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946 + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" masamune_annotation: dependency: "direct main" description: name: masamune_annotation - sha256: "6f1c70ae067abdf37ff440286c57d6ee7c4eb0b61a01858344f7d2b6e1ce4ce8" + sha256: fdc7068cbffafd00756f85682100456e65f6038da97bf309c78471474d2ed7d2 url: "https://pub.dev" source: hosted - version: "1.1.7" + version: "1.1.8" matcher: dependency: transitive description: @@ -793,10 +793,10 @@ packages: dependency: transitive description: name: vm_service - sha256: d069ad658b700fc5fb774771ac8997f226ca29a45e0a450776fff3d969c8ba8f + sha256: "2277c73618916ae3c2082b6df67b6ebb64b4c69d9bf23b23700707952ac30e60" url: "https://pub.dev" source: hosted - version: "10.1.0" + version: "10.1.2" watcher: dependency: transitive description: diff --git a/packages/masamune_annotation/pubspec.lock b/packages/masamune_annotation/pubspec.lock index 3a217e08b..c74178904 100644 --- a/packages/masamune_annotation/pubspec.lock +++ b/packages/masamune_annotation/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.1" convert: dependency: transitive description: @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: js - sha256: "323b7c70073cccf6b9b8d8b334be418a3293cfb612a560dc2737160a37bf61bd" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.6" + version: "0.6.7" katana: dependency: "direct main" description: @@ -205,10 +205,10 @@ packages: dependency: transitive description: name: logging - sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946 + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" matcher: dependency: transitive description: @@ -437,10 +437,10 @@ packages: dependency: transitive description: name: vm_service - sha256: d069ad658b700fc5fb774771ac8997f226ca29a45e0a450776fff3d969c8ba8f + sha256: "2277c73618916ae3c2082b6df67b6ebb64b4c69d9bf23b23700707952ac30e60" url: "https://pub.dev" source: hosted - version: "10.1.0" + version: "10.1.2" watcher: dependency: transitive description: @@ -474,4 +474,4 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=2.19.0-345.0.dev <4.0.0" + dart: ">=2.19.0 <4.0.0" diff --git a/packages/masamune_builder/lib/model/collection_model_class.dart b/packages/masamune_builder/lib/model/collection_model_class.dart index 27bff646e..01636c8d2 100644 --- a/packages/masamune_builder/lib/model/collection_model_class.dart +++ b/packages/masamune_builder/lib/model/collection_model_class.dart @@ -1,96 +1,207 @@ part of masamune_builder; -/// Keys for querying the collection. +/// The type of query method for the collection. /// -/// The type of the key in [type]. [defaultValue] is the initial value of the key. -/// -/// コレクションのクエリー用のキー。 -/// -/// [type]にキーのタイプ。[defaultValue]にキーの初期値を記述します。 -enum CollectionQueryKey { - /// Query Key. +/// コレクションのクエリーメソッドのタイプ。 +enum CollectionQueryType { + /// The method of `equal`. /// - /// クエリーキー。 - key(), + /// `equal`のメソッド。 + equal, - /// The key of `equalTo`. + /// The method for `notEqual`. /// - /// `equalTo`のキー。 - isEqualTo("dynamic"), + /// `notEqual`のメソッド。 + notEqual, - /// Key for `notEqualTo`. + /// The method for `lessThan`. /// - /// `notEqualTo`のキー。 - isNotEqualTo("dynamic"), + /// `lessThan`のメソッド。 + lessThan, - /// Key for `lessThanOrEqualTo`. + /// The method for `greaterThan`. /// - /// `lessThanOrEqualTo`のキー。 - isLessThanOrEqualTo("dynamic"), + /// `greaterThan`のメソッド。 + greaterThan, - /// Key for `greaterThanOrEqualTo`. + /// The method for `lessThanOrEqual`. /// - /// `greaterThanOrEqualTo`のキー。 - isGreaterThanOrEqualTo("dynamic"), + /// `lessThanOrEqual`のメソッド。 + lessThanOrEqual, - /// Key for `arrayContains`. + /// The method for `greaterThanOrEqual`. /// - /// `arrayContains`のキー。 - arrayContains("dynamic"), + /// `greaterThanOrEqual`のメソッド。 + greaterThanOrEqual, - /// Key for `arrayContainsAny`. + /// The method for `contains`. /// - /// `arrayContainsAny`のキー。 - arrayContainsAny("List?"), + /// `contains`のメソッド。 + contains, - /// Key for `whereIn`. + /// The method for `containsAny`. /// - /// `whereIn`のキー。 - whereIn("List?"), + /// `containsAny`のメソッド。 + containsAny, - /// Key for `whereNotIn`. + /// The method for `where`. /// - /// `whereNotIn`のキー。 - whereNotIn("List?"), + /// `where`のメソッド。 + where, - /// Key for `geoHash`. + /// The method for `notWhere`. /// - /// `geoHash`のキー。 - geoHash("List?"), + /// `notWhere`のメソッド。 + notWhere, - /// Key for `order`. + /// The method for `isNull`. /// - /// `order`のキー。 - order("ModelQueryOrder", "ModelQueryOrder.asc"), + /// `isNull`のメソッド。 + isNull, - /// Key for `limit`. + /// The method for `isNotNull`. /// - /// `limit`のキー。 - limit("int?"), + /// `isNotNull`のメソッド。 + isNotNull, - /// Key for `orderBy`. + /// The method for `geo`. /// - /// `orderBy`のキー。 - orderBy("String?"); + /// `geo`のメソッド。 + geo, - /// Keys for querying the collection. + /// The method for `orderByAsc`. /// - /// The type of the key in [type]. [defaultValue] is the initial value of the key. + /// `orderByAsc`のメソッド。 + orderByAsc, + + /// The method for `orderByDesc`. /// - /// コレクションのクエリー用のキー。 + /// `orderByDesc`のメソッド。 + orderByDesc, + + /// The method for `limitTo`. /// - /// [type]にキーのタイプ。[defaultValue]にキーの初期値を記述します。 - const CollectionQueryKey([this.type, this.defaultValue]); + /// `limitTo`のメソッド。 + limitTo; - /// Key Type. + /// Gets the parameters for the input of the method. + /// + /// Specify the name of the key in [keyName]. + /// + /// メソッドの入力用のパラメーターを取得します。 /// - /// キーのタイプ。 - final String? type; + /// [keyName]でキーの名前を指定してください。 + List parameters(String keyName) { + switch (this) { + case CollectionQueryType.equal: + case CollectionQueryType.notEqual: + case CollectionQueryType.contains: + return [ + Parameter( + (p) => p + ..name = "key" + ..type = Reference(keyName), + ), + Parameter( + (p) => p + ..name = "value" + ..type = const Reference("Object"), + ), + ]; + case CollectionQueryType.lessThan: + case CollectionQueryType.greaterThan: + case CollectionQueryType.lessThanOrEqual: + case CollectionQueryType.greaterThanOrEqual: + return [ + Parameter( + (p) => p + ..name = "key" + ..type = Reference(keyName), + ), + Parameter( + (p) => p + ..name = "value" + ..type = const Reference("num"), + ), + ]; + case CollectionQueryType.containsAny: + case CollectionQueryType.where: + case CollectionQueryType.notWhere: + return [ + Parameter( + (p) => p + ..name = "key" + ..type = Reference(keyName), + ), + Parameter( + (p) => p + ..name = "values" + ..type = const Reference("List"), + ), + ]; + case CollectionQueryType.geo: + return [ + Parameter( + (p) => p + ..name = "key" + ..type = Reference(keyName), + ), + Parameter( + (p) => p + ..name = "geoHash" + ..type = const Reference("List"), + ), + ]; + case CollectionQueryType.isNull: + case CollectionQueryType.isNotNull: + case CollectionQueryType.orderByAsc: + case CollectionQueryType.orderByDesc: + return [ + Parameter( + (p) => p + ..name = "key" + ..type = Reference(keyName), + ), + ]; + case CollectionQueryType.limitTo: + return [ + Parameter( + (p) => p + ..name = "value" + ..type = const Reference("int"), + ), + ]; + } + } - /// Initial value of the key. + /// Outputs the code for the method. /// - /// キーの初期値。 - final String? defaultValue; + /// メソッド用のコードを出力します。 + String get methodCode { + switch (this) { + case CollectionQueryType.equal: + case CollectionQueryType.notEqual: + case CollectionQueryType.contains: + case CollectionQueryType.lessThan: + case CollectionQueryType.greaterThan: + case CollectionQueryType.lessThanOrEqual: + case CollectionQueryType.greaterThanOrEqual: + return "$name(key.name, value)"; + case CollectionQueryType.containsAny: + case CollectionQueryType.where: + case CollectionQueryType.notWhere: + return "$name(key.name, values)"; + case CollectionQueryType.geo: + return "$name(key.name, geoHash)"; + case CollectionQueryType.isNull: + case CollectionQueryType.isNotNull: + case CollectionQueryType.orderByAsc: + case CollectionQueryType.orderByDesc: + return "$name(key.name)"; + case CollectionQueryType.limitTo: + return "$name(value)"; + } + } } /// Create a class to automatically create a collection model. @@ -224,22 +335,10 @@ List collectionModelClass( ..type = const Reference("String"), ); }), - ...CollectionQueryKey.values.map((key) { - return Parameter( - (p) => p - ..name = key.name - ..named = true - ..type = - Reference(key.type ?? "${model.name}CollectionKey?") - ..defaultTo = key.defaultValue == null - ? null - : Code(key.defaultValue!), - ); - }) ]) ..returns = Reference("_\$_${model.name}CollectionQuery") ..body = Code( - "return _\$_${model.name}CollectionQuery(CollectionModelQuery(\"${path.path.replaceAllMapped(_pathRegExp, (m) => "\$${m.group(1)?.toCamelCase() ?? ""}")}\", ${CollectionQueryKey.values.map((key) => "${key.name}:${key.type == null ? "${key.name}?.name" : key.name}").join(",")}));", + "return _\$_${model.name}CollectionQuery(CollectionModelQuery(\"${path.path.replaceAllMapped(_pathRegExp, (m) => "\$${m.group(1)?.toCamelCase() ?? ""}")}\"));", ), ) ]), @@ -291,6 +390,18 @@ List collectionModelClass( ..returns = const Reference("String") ..body = const Code("modelQuery.toString()"), ), + ...CollectionQueryType.values.map((queryType) { + return Method( + (m) => m + ..name = queryType.name + ..returns = Reference("_\$_${model.name}CollectionQuery") + ..requiredParameters.addAll( + [...queryType.parameters("${model.name}CollectionKey")]) + ..body = Code( + "return _\$_${model.name}CollectionQuery(modelQuery.${queryType.methodCode});", + ), + ); + }), ]), ) ]; diff --git a/packages/masamune_builder/pubspec.lock b/packages/masamune_builder/pubspec.lock index b5bf73d25..9ddf57d2e 100644 --- a/packages/masamune_builder/pubspec.lock +++ b/packages/masamune_builder/pubspec.lock @@ -93,10 +93,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.1" convert: dependency: transitive description: @@ -245,10 +245,10 @@ packages: dependency: transitive description: name: js - sha256: "323b7c70073cccf6b9b8d8b334be418a3293cfb612a560dc2737160a37bf61bd" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.6" + version: "0.6.7" json_annotation: dependency: transitive description: @@ -357,18 +357,18 @@ packages: dependency: transitive description: name: logging - sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946 + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" masamune_annotation: dependency: "direct main" description: name: masamune_annotation - sha256: "6f1c70ae067abdf37ff440286c57d6ee7c4eb0b61a01858344f7d2b6e1ce4ce8" + sha256: fdc7068cbffafd00756f85682100456e65f6038da97bf309c78471474d2ed7d2 url: "https://pub.dev" source: hosted - version: "1.1.7" + version: "1.1.8" matcher: dependency: transitive description: @@ -605,10 +605,10 @@ packages: dependency: transitive description: name: vm_service - sha256: d069ad658b700fc5fb774771ac8997f226ca29a45e0a450776fff3d969c8ba8f + sha256: "2277c73618916ae3c2082b6df67b6ebb64b4c69d9bf23b23700707952ac30e60" url: "https://pub.dev" source: hosted - version: "10.1.0" + version: "10.1.2" watcher: dependency: transitive description: @@ -642,4 +642,4 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=2.19.0-345.0.dev <4.0.0" + dart: ">=2.19.0 <4.0.0"