@@ -6,7 +6,6 @@ import { Logger } from "./helpers";
66
77import { isCosmosDbContainer } from "./helpers" ;
88import { createCachingMethods , CachedMethods , FindArgs } from "./cache" ;
9- import DataLoader from "dataloader" ;
109
1110export interface CosmosDataSourceOptions {
1211 logger ?: Logger ;
@@ -40,7 +39,7 @@ export class CosmosDataSource<TData extends { id: string }, TContext = any>
4039 primeLoader : CachedMethods < TData > [ "primeLoader" ] = placeholderHandler ;
4140
4241 /**
43- * Same as findManyByQuery but returns the entire CosmosDB response which is sometimes useful
42+ *
4443 * @param query
4544 * @param param1
4645 */
@@ -58,9 +57,44 @@ export class CosmosDataSource<TData extends { id: string }, TContext = any>
5857 if ( this . dataLoader && results . resources ) {
5958 this . primeLoader ( results . resources , ttl ) ;
6059 }
60+ this . options ?. logger ?. info (
61+ `CosmosDataSource.findManyByQuery: complete. rows: ${ results . resources . length } , RUs: ${ results . requestCharge } , hasMoreResults: ${ results . hasMoreResults } `
62+ ) ;
6163 return results ;
6264 }
6365
66+ async createOne ( newDoc : TData , options : QueryFindArgs = { } ) {
67+ const { requestOptions } = options ;
68+ const response = await this . container . items . create < TData > (
69+ newDoc ,
70+ requestOptions
71+ ) ;
72+ return response ;
73+ }
74+
75+ async deleteOne ( id : string ) {
76+ const response = await this . container . item ( id ) . delete ( ) ;
77+ return response ;
78+ }
79+
80+ async updateOne ( updDoc : TData ) {
81+ const response = await this . container . item ( updDoc . id ) . replace ( updDoc ) ;
82+ return response ;
83+ }
84+
85+ async updateOnePartial ( id : string , contents : Partial < TData > ) {
86+ this . options ?. logger ?. debug (
87+ `Updating doc id ${ id } contents: ${ JSON . stringify ( contents , null , "" ) } `
88+ ) ;
89+ const item = this . container . item ( id , id ) ;
90+ const docItem = await item . read < TData > ( ) ;
91+ const { resource } = docItem ;
92+ const newResource = { ...resource , ...contents , id } as TData ; // don't change the ID ever
93+ const replaceResult = await item . replace < TData > ( newResource ) ;
94+
95+ return replaceResult ;
96+ }
97+
6498 constructor ( container : Container , options : CosmosDataSourceOptions = { } ) {
6599 super ( ) ;
66100 console . log ( `options: ${ options . logger } ` ) ;
0 commit comments