From 345780bea0b5a5ee1d12ffc394ec5b304a842b7e Mon Sep 17 00:00:00 2001 From: oXtxNt9U <120286271+oXtxNt9U@users.noreply.github.com> Date: Thu, 26 Jun 2025 10:31:48 +0900 Subject: [PATCH 1/3] add NotEqual expression --- packages/api-database/source/search/query-helper.ts | 7 +++++++ packages/api-database/source/search/types/expressions.ts | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/packages/api-database/source/search/query-helper.ts b/packages/api-database/source/search/query-helper.ts index d1fff97194..bc1d48fc0c 100644 --- a/packages/api-database/source/search/query-helper.ts +++ b/packages/api-database/source/search/query-helper.ts @@ -75,6 +75,13 @@ export class QueryHelper { const parameters = { [parameter]: expression.value }; return { parameters, query }; } + case "notEqual": { + const column = this.getColumnName(metadata, expression.property, expression.jsonFieldAccessor); + const parameter = `p${this.paramNo++}`; + const query = `${column} <> :${parameter}`; + const parameters = { [parameter]: expression.value }; + return { parameters, query }; + } case "between": { const column = this.getColumnName(metadata, expression.property, expression.jsonFieldAccessor); const parameterFrom = `p${this.paramNo++}`; diff --git a/packages/api-database/source/search/types/expressions.ts b/packages/api-database/source/search/types/expressions.ts index 0dfbcd0e07..1234e3a2c5 100644 --- a/packages/api-database/source/search/types/expressions.ts +++ b/packages/api-database/source/search/types/expressions.ts @@ -13,6 +13,13 @@ export type EqualExpression = { value: any; }; +export type NotEqualExpression = { + property: keyof TEntity; + jsonFieldAccessor?: JsonFieldAccessor; + op: "notEqual"; + value: any; +}; + export type BetweenExpression = { property: keyof TEntity; jsonFieldAccessor?: JsonFieldAccessor; @@ -75,6 +82,7 @@ export type Expression = | TrueExpression | FalseExpression | EqualExpression + | NotEqualExpression | BetweenExpression | GreaterThanEqualExpression | LessThanEqualExpression From 46a434dab2d9462b4566f378c46b167d6b228ab0 Mon Sep 17 00:00:00 2001 From: oXtxNt9U <120286271+oXtxNt9U@users.noreply.github.com> Date: Thu, 26 Jun 2025 10:32:08 +0900 Subject: [PATCH 2/3] filter out empty validator keys --- .../1729064427168-CreateUpdateValidatorRankingFunction.ts | 2 +- .../api-database/source/search/filters/validator-filter.ts | 6 ++++++ packages/api-http/source/controllers/validators.ts | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/api-database/source/migrations/1729064427168-CreateUpdateValidatorRankingFunction.ts b/packages/api-database/source/migrations/1729064427168-CreateUpdateValidatorRankingFunction.ts index bcfbd4759d..bba241f305 100644 --- a/packages/api-database/source/migrations/1729064427168-CreateUpdateValidatorRankingFunction.ts +++ b/packages/api-database/source/migrations/1729064427168-CreateUpdateValidatorRankingFunction.ts @@ -13,7 +13,7 @@ export class CreateUpdateValidatorRankingFunction1729064427168 implements Migrat (attributes->>'validatorVoteBalance')::numeric AS vote_balance, COALESCE((attributes->>'validatorResigned')::boolean, FALSE) AS is_resigned FROM wallets - WHERE attributes ? 'validatorPublicKey' + WHERE attributes ? 'validatorPublicKey' AND attributes->>'validatorPublicKey' <> '' ), ranking AS ( SELECT diff --git a/packages/api-database/source/search/filters/validator-filter.ts b/packages/api-database/source/search/filters/validator-filter.ts index 611dd8f205..3e55c1ae8e 100644 --- a/packages/api-database/source/search/filters/validator-filter.ts +++ b/packages/api-database/source/search/filters/validator-filter.ts @@ -23,6 +23,12 @@ export class ValidatorFilter { { expressions: [ { attribute: "validatorPublicKey", op: "jsonbAttributeExists", property: "attributes" }, + { + property: "attributes", + jsonFieldAccessor: { fieldName: "validatorPublicKey", operator: "->>" }, + op: "notEqual", + value: "", + }, ], op: "and", }, diff --git a/packages/api-http/source/controllers/validators.ts b/packages/api-http/source/controllers/validators.ts index 7ce960cac8..77bafe5aa5 100644 --- a/packages/api-http/source/controllers/validators.ts +++ b/packages/api-http/source/controllers/validators.ts @@ -109,6 +109,7 @@ export class ValidatorsController extends Controller { .createQueryBuilder() .select() .where("attributes ? :validatorPublicKey", { validatorPublicKey: "validatorPublicKey" }) + .andWhere("attributes->>:validatorPublicKey <> ''", { validatorPublicKey: "validatorPublicKey" }) .andWhere( new ApiDatabaseContracts.Brackets((query) => { query From 4ae3b66d3aaa7bd707910e06b33845d4d48f89e2 Mon Sep 17 00:00:00 2001 From: oXtxNt9U <120286271+oXtxNt9U@users.noreply.github.com> Date: Thu, 26 Jun 2025 01:34:54 +0000 Subject: [PATCH 3/3] style: resolve style guide violations --- packages/api-database/source/search/filters/validator-filter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/api-database/source/search/filters/validator-filter.ts b/packages/api-database/source/search/filters/validator-filter.ts index 3e55c1ae8e..32adf385b4 100644 --- a/packages/api-database/source/search/filters/validator-filter.ts +++ b/packages/api-database/source/search/filters/validator-filter.ts @@ -24,9 +24,9 @@ export class ValidatorFilter { expressions: [ { attribute: "validatorPublicKey", op: "jsonbAttributeExists", property: "attributes" }, { - property: "attributes", jsonFieldAccessor: { fieldName: "validatorPublicKey", operator: "->>" }, op: "notEqual", + property: "attributes", value: "", }, ],