diff --git a/src/packages/pongo/src/main/typing/operations.ts b/src/packages/pongo/src/main/typing/operations.ts index 8e31def..85c0a86 100644 --- a/src/packages/pongo/src/main/typing/operations.ts +++ b/src/packages/pongo/src/main/typing/operations.ts @@ -32,6 +32,15 @@ export interface PongoCollection { deleteMany(filter?: PongoFilter): Promise; findOne(filter?: PongoFilter): Promise; find(filter?: PongoFilter): Promise; + findOneAndDelete(filter: PongoFilter): Promise; + findOneAndReplace( + filter: PongoFilter, + replacement: WithoutId, + ): Promise; + findOneAndUpdate( + filter: PongoFilter, + update: PongoUpdate, + ): Promise; countDocuments(filter?: PongoFilter): Promise; drop(): Promise; rename(newName: string): Promise>; diff --git a/src/packages/pongo/src/mongo/mongoCollection.ts b/src/packages/pongo/src/mongo/mongoCollection.ts index 87d4687..f857a46 100644 --- a/src/packages/pongo/src/mongo/mongoCollection.ts +++ b/src/packages/pongo/src/mongo/mongoCollection.ts @@ -378,12 +378,12 @@ export class Collection implements MongoCollection { ): Promise | null>; findOneAndDelete(filter: Filter): Promise | null>; findOneAndDelete( - _filter: unknown, + filter: unknown, _options?: unknown, - ): - | Promise | null> - | Promise> { - throw new Error('Method not implemented.'); + ): Promise | null | ModifyResult> { + return this.collection.findOneAndDelete( + filter as PongoFilter, + ) as Promise>; } findOneAndReplace( filter: Filter, @@ -405,13 +405,14 @@ export class Collection implements MongoCollection { replacement: WithoutId, ): Promise | null>; findOneAndReplace( - _filter: unknown, - _replacement: unknown, + filter: unknown, + replacement: unknown, _options?: unknown, - ): - | Promise | null> - | Promise> { - throw new Error('Method not implemented.'); + ): Promise | null | ModifyResult> { + return this.collection.findOneAndReplace( + filter as PongoFilter, + replacement as WithoutId, + ) as Promise>; } findOneAndUpdate( filter: Filter, @@ -433,13 +434,14 @@ export class Collection implements MongoCollection { update: UpdateFilter, ): Promise | null>; findOneAndUpdate( - _filter: unknown, - _update: unknown, + filter: unknown, + update: unknown, _options?: unknown, - ): - | Promise | null> - | Promise> { - throw new Error('Method not implemented.'); + ): Promise | null | ModifyResult> { + return this.collection.findOneAndUpdate( + filter as PongoFilter, + update as PongoUpdate, + ) as Promise>; } aggregate( _pipeline?: Document[] | undefined, diff --git a/src/packages/pongo/src/postgres/postgresCollection.ts b/src/packages/pongo/src/postgres/postgresCollection.ts index 1e60d40..17cc525 100644 --- a/src/packages/pongo/src/postgres/postgresCollection.ts +++ b/src/packages/pongo/src/postgres/postgresCollection.ts @@ -119,6 +119,44 @@ export const postgresCollection = ( const result = await execute(SqlFor.findOne(filter ?? {})); return (result.rows[0]?.data ?? null) as T | null; }, + findOneAndDelete: async (filter: PongoFilter): Promise => { + await createCollection; + + const existingDoc = await collection.findOne(filter); + + if (existingDoc === null) return null; + + await collection.deleteOne(filter); + return existingDoc; + }, + findOneAndReplace: async ( + filter: PongoFilter, + replacement: WithoutId, + ): Promise => { + await createCollection; + + const existingDoc = await collection.findOne(filter); + + if (existingDoc === null) return null; + + await collection.replaceOne(filter, replacement); + + return existingDoc; + }, + findOneAndUpdate: async ( + filter: PongoFilter, + update: PongoUpdate, + ): Promise => { + await createCollection; + + const existingDoc = await collection.findOne(filter); + + if (existingDoc === null) return null; + + await collection.updateOne(filter, update); + + return existingDoc; + }, handle: async ( id: string, handle: DocumentHandler,