Skip to content

Commit 03db1bd

Browse files
committed
add durable generics
1 parent 5f11b15 commit 03db1bd

File tree

2 files changed

+57
-34
lines changed

2 files changed

+57
-34
lines changed

src/functions/durableEntity.ts

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1-
import { HttpRequest, InvocationContext } from '@azure/functions';
1+
import { app, HttpRequest, InvocationContext, output, trigger } from '@azure/functions';
22
import * as df from 'durable-functions';
3-
import { DurableOrchestrationClient, IEntityFunctionContext } from 'durable-functions/lib/src/classes';
3+
import { IEntityFunctionContext } from 'durable-functions/lib/src/ientityfunctioncontext';
44

5-
df.httpClient(
6-
'DurableFunctionsEntityHTTPStart',
7-
async (_context: InvocationContext, req: HttpRequest, client: DurableOrchestrationClient) => {
8-
const id: string = req.query.get('id');
5+
const clientInput = df.input.client();
6+
app.generic('DurableFunctionsEntityHTTPStart', {
7+
trigger: trigger.http({
8+
route: 'Counter/{id}'
9+
}),
10+
extraInputs: [clientInput],
11+
return: output.http({}),
12+
handler: async function (context: InvocationContext, req: HttpRequest): Promise<any> {
13+
const client = df.getClient(context, clientInput);
14+
const id: string = req.params.id;
915
const entityId = new df.EntityId('Counter', id);
1016

1117
if (req.method === 'POST') {
@@ -19,17 +25,20 @@ df.httpClient(
1925
};
2026
}
2127
}
22-
);
28+
});
2329

24-
df.entity('Counter', (context: IEntityFunctionContext<number>) => {
25-
const currentValue: number = context.df.getState(() => 0);
26-
switch (context.df.operationName) {
27-
case 'add':
28-
const amount: number = context.df.getInput();
29-
context.df.setState(currentValue + amount);
30-
break;
31-
case 'reset':
32-
context.df.setState(0);
33-
break;
34-
}
30+
app.generic('Counter', {
31+
trigger: df.trigger.entity(),
32+
handler: df.createEntityFunction(function (context: IEntityFunctionContext<number>) {
33+
const currentValue: number = context.df.getState(() => 0);
34+
switch (context.df.operationName) {
35+
case 'add':
36+
const amount: number = context.df.getInput();
37+
context.df.setState(currentValue + amount);
38+
break;
39+
case 'reset':
40+
context.df.setState(0);
41+
break;
42+
}
43+
})
3544
});

src/functions/durableOrchestration.ts

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,39 @@
1-
import { HttpRequest, InvocationContext } from '@azure/functions';
1+
import { app, HttpRequest, InvocationContext, output, trigger } from '@azure/functions';
22
import * as df from 'durable-functions';
3-
import { DurableOrchestrationClient, IOrchestrationFunctionContext } from 'durable-functions/lib/src/classes';
3+
import { IOrchestrationFunctionContext } from 'durable-functions/lib/src/classes';
44

5-
df.orchestration('DurableFunctionsOrchestratorJS', function* (context: IOrchestrationFunctionContext) {
6-
const outputs = [];
7-
outputs.push(yield context.df.callActivity('Hello', 'Tokyo'));
8-
outputs.push(yield context.df.callActivity('Hello', 'Seattle'));
9-
outputs.push(yield context.df.callActivity('Hello', 'Cairo'));
5+
app.generic('DurableFunctionsOrchestratorJS', {
6+
trigger: df.trigger.orchestration(),
7+
handler: df.createOrchestrator(function* (context: IOrchestrationFunctionContext) {
8+
const outputs = [];
9+
outputs.push(yield context.df.callActivity('Hello', 'Tokyo'));
10+
outputs.push(yield context.df.callActivity('Hello', 'Seattle'));
11+
outputs.push(yield context.df.callActivity('Hello', 'Cairo'));
1012

11-
return outputs;
13+
return outputs;
14+
})
1215
});
1316

14-
df.activity('Hello', (context: InvocationContext, name: string) => {
15-
return `Hello, ${name}`;
17+
app.generic('Hello', {
18+
trigger: df.trigger.activity(),
19+
handler: async function (context: InvocationContext, name: string): Promise<string> {
20+
return `Hello ${name}`;
21+
}
1622
});
1723

18-
df.httpClient(
19-
'DurableFunctionsHttpStart',
20-
async (context: InvocationContext, req: HttpRequest, client: DurableOrchestrationClient) => {
21-
const instanceId = await client.startNew(req.query.get('functionName'), undefined, req.body);
22-
context.log(`Started orchestration with ID = '${instanceId}'.`);
24+
const clientInput = df.input.client();
25+
app.generic('DurableFunctionsHttpStart', {
26+
trigger: trigger.http({
27+
route: 'orchestrators/{functionName}'
28+
}),
29+
extraInputs: [clientInput],
30+
return: output.http({}),
31+
handler: async function (context: InvocationContext, req: HttpRequest): Promise<any> {
32+
const client = df.getClient(context, clientInput);
33+
const instanceId = await client.startNew(req.params.functionName, undefined, req.body);
34+
35+
context.log(`Started orchestration with ID = ${instanceId}.`);
36+
2337
return client.createCheckStatusResponse(req, instanceId);
2438
}
25-
);
39+
});

0 commit comments

Comments
 (0)