From bcca5d91296f24e10fdf842cda26a32f6f910ef4 Mon Sep 17 00:00:00 2001 From: Michal Klobukowski Date: Wed, 4 Jul 2018 15:52:33 +0200 Subject: [PATCH] Add convenience create method add handle Resource type in FitlerBuilder Feature #13703 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- src/common/api/filter-builder.ts | 30 ++++++++++++------- .../collection-service/collection-service.ts | 4 +-- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/common/api/filter-builder.ts b/src/common/api/filter-builder.ts index 443c7639..cc31f384 100644 --- a/src/common/api/filter-builder.ts +++ b/src/common/api/filter-builder.ts @@ -2,33 +2,43 @@ // // SPDX-License-Identifier: AGPL-3.0 -export enum FilterField { - UUID = "uuid", - OWNER_UUID = "owner_uuid" -} +import * as _ from "lodash"; +import { Resource } from "./common-resource-service"; -export default class FilterBuilder { +export default class FilterBuilder { private filters = ""; - private addCondition(field: FilterField, cond: string, value?: string, prefix: string = "", postfix: string = "") { + static create() { + return new FilterBuilder(); + } + + private addCondition(field: keyof T, cond: string, value?: string | string[], prefix: string = "", postfix: string = "") { if (value) { - this.filters += `["${field}","${cond}","${prefix}${value}${postfix}"]`; + value = typeof value === "string" + ? `"${prefix}${value}${postfix}"` + : `["${value.join(`","`)}"]`; + + this.filters += `["${_.snakeCase(field.toString())}","${cond}",${value}]`; } return this; } - public addEqual(field: FilterField, value?: string) { + public addEqual(field: keyof T, value?: string) { return this.addCondition(field, "=", value); } - public addLike(field: FilterField, value?: string) { + public addLike(field: keyof T, value?: string) { return this.addCondition(field, "like", value, "", "%"); } - public addILike(field: FilterField, value?: string) { + public addILike(field: keyof T, value?: string) { return this.addCondition(field, "ilike", value, "", "%"); } + public addIsA(field: keyof T, value?: string | string[]) { + return this.addCondition(field, "is_a", value); + } + public get() { return "[" + this.filters + "]"; } diff --git a/src/services/collection-service/collection-service.ts b/src/services/collection-service/collection-service.ts index bc912817..8a1d6932 100644 --- a/src/services/collection-service/collection-service.ts +++ b/src/services/collection-service/collection-service.ts @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0 import { serverApi } from "../../common/api/server-api"; -import FilterBuilder, { FilterField } from "../../common/api/filter-builder"; +import FilterBuilder from "../../common/api/filter-builder"; import { ArvadosResource } from "../response"; import { Collection } from "../../models/collection"; import { getResourceKind } from "../../models/resource"; @@ -32,7 +32,7 @@ export default class CollectionService { public getCollectionList = (parentUuid?: string): Promise => { if (parentUuid) { const fb = new FilterBuilder(); - fb.addLike(FilterField.OWNER_UUID, parentUuid); + fb.addLike("ownerUuid", parentUuid); return serverApi.get('/collections', { params: { filters: fb.get() }}).then(resp => { -- 2.30.2