From 75d33d1e63edad9174cb55e4890842170d463685 Mon Sep 17 00:00:00 2001 From: Wian Snyman Date: Thu, 23 Jan 2025 23:35:45 +0200 Subject: [PATCH] feat(firestore): update Firestore dependency and enhance query filtering capabilities with Filters --- packages/core/package.json | 3 ++- packages/core/src/storage/query.ts | 11 ++++++++--- packages/firestore/package.json | 2 +- packages/firestore/src/lib/storage/query.ts | 19 +++++++++++++++---- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 0fe0775..916f55b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -41,7 +41,8 @@ "dependencies": { "lodash": "^4.17.21", "reflect-metadata": "^0.1.13", - "ts-object-path": "^0.1.2" + "ts-object-path": "^0.1.2", + "@google-cloud/firestore": "^7.11.0" }, "gitHead": "0b06debcfa978dcfd12f74599cded3802179e34b" } diff --git a/packages/core/src/storage/query.ts b/packages/core/src/storage/query.ts index 961ee37..fef8156 100644 --- a/packages/core/src/storage/query.ts +++ b/packages/core/src/storage/query.ts @@ -1,14 +1,19 @@ import { BaseModel, ModelQuery } from './types'; import { getPath } from 'ts-object-path'; +import { Filter } from '@google-cloud/firestore'; export type WhereProp = string | ((t: T) => unknown); export abstract class BaseQuery { - protected abstract applyWhere(key: string, operator: Op, value: any): this; + protected abstract applyWhere(key: string | Filter, operator: Op, value: any): this; + protected abstract applyWhere(filter: Filter): this; abstract execute(): R; - where(prop: WhereProp, op: Op, value: any) { - return this.applyWhere(this.getWhereProp(prop), op, value); + where(propOrFilter: WhereProp | Filter, op?: Op, value?: any) { + if (propOrFilter instanceof Filter) { + return this.applyWhere(propOrFilter); + } + return this.applyWhere(this.getWhereProp(propOrFilter), op!, value); } whereAll>(attributes: K | null) { diff --git a/packages/firestore/package.json b/packages/firestore/package.json index e77f51d..3c68dd9 100644 --- a/packages/firestore/package.json +++ b/packages/firestore/package.json @@ -39,7 +39,7 @@ "license": "MIT", "homepage": "https://github.com/freshfox/firestore-storage", "dependencies": { - "@google-cloud/firestore": "^6.5.0" + "@google-cloud/firestore": "^7.11.0" }, "devDependencies": { "@firebase/rules-unit-testing": "^2.0.7", diff --git a/packages/firestore/src/lib/storage/query.ts b/packages/firestore/src/lib/storage/query.ts index 93f29c1..e5bcf94 100644 --- a/packages/firestore/src/lib/storage/query.ts +++ b/packages/firestore/src/lib/storage/query.ts @@ -5,6 +5,7 @@ import { QuerySnapshot, WhereFilterOp, Query as FSQuery, + Filter, } from '@google-cloud/firestore'; import { BaseQuery, BaseModel, WhereProp } from 'firestore-storage-core'; @@ -13,10 +14,20 @@ export class Query extends BaseQuery( + keyOrFilter: K, + ...args: K extends string + ? [FirebaseFirestore.WhereFilterOp, any] + : [] + ): this { + if (typeof keyOrFilter === 'string') { + const [operator, value] = args as [FirebaseFirestore.WhereFilterOp, any]; + this.base = this.base.where(keyOrFilter, operator, value); + } else { + this.base = this.base.where(keyOrFilter as Filter); + } + return this; + } orderBy(prop: WhereProp, direction: OrderByDirection) { this.base = this.base.orderBy(this.getWhereProp(prop), direction);