Skip to content

Commit 466742e

Browse files
committed
add mutation methods
1 parent cf69b1f commit 466742e

1 file changed

Lines changed: 36 additions & 2 deletions

File tree

src/datasource.ts

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { Logger } from "./helpers";
66

77
import { isCosmosDbContainer } from "./helpers";
88
import { createCachingMethods, CachedMethods, FindArgs } from "./cache";
9-
import DataLoader from "dataloader";
109

1110
export 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

Comments
 (0)