Skip to content

Commit 1de00c5

Browse files
Update all SDKs to 1.0.0
Signed-off-by: slinkydeveloper <[email protected]>
1 parent 411f604 commit 1de00c5

File tree

39 files changed

+134
-121
lines changed

39 files changed

+134
-121
lines changed

basics/basics-java/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ repositories {
99
mavenCentral()
1010
}
1111

12-
val restateVersion = "0.9.2"
12+
val restateVersion = "1.0.0"
1313

1414
dependencies {
1515
annotationProcessor("dev.restate:sdk-api-gen:$restateVersion")

basics/basics-java/src/main/java/events_processing/UserUpdatesService.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@
2121
// entire partitions.
2222
//
2323

24+
import dev.restate.sdk.JsonSerdes;
2425
import dev.restate.sdk.ObjectContext;
2526
import dev.restate.sdk.annotation.Handler;
2627
import dev.restate.sdk.annotation.VirtualObject;
27-
import dev.restate.sdk.common.CoreSerdes;
2828
import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder;
29-
import events_state.ProfileService;
3029
import utils.UserUpdate;
3130

3231
import java.time.Duration;
@@ -54,19 +53,19 @@ public class UserUpdatesService {
5453
public void updateUserEvent(ObjectContext ctx, UserUpdate update) {
5554

5655
// event handler is a durably executed function that can use all the features of Restate
57-
String userId = ctx.run(CoreSerdes.JSON_STRING, () -> updateUserProfile(update.getProfile()));
56+
String userId = ctx.run(JsonSerdes.STRING, () -> updateUserProfile(update.getProfile()));
5857
while(userId.equals("NOT_READY")) {
5958
// Delay the processing of the event by sleeping.
6059
// The other events for this Virtual Object / key are queued.
6160
// Events for other keys are processed concurrently.
6261
// The sleep suspends the function (e.g., when running on FaaS).
6362
ctx.sleep(Duration.ofMillis(5000));
64-
userId = ctx.run(CoreSerdes.JSON_STRING, () -> updateUserProfile(update.getProfile()));
63+
userId = ctx.run(JsonSerdes.STRING, () -> updateUserProfile(update.getProfile()));
6564
}
6665

6766

6867
String finalUserId = userId;
69-
String roleId = ctx.run(CoreSerdes.JSON_STRING,
68+
String roleId = ctx.run(JsonSerdes.STRING,
7069
() -> setUserPermissions(finalUserId, update.getPermissions()));
7170
ctx.run(() -> provisionResources(finalUserId, roleId, update.getResources()));
7271
}

basics/basics-java/src/main/java/events_state/ProfileService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111

1212
package events_state;
1313

14+
import dev.restate.sdk.JsonSerdes;
1415
import dev.restate.sdk.ObjectContext;
1516
import dev.restate.sdk.annotation.Handler;
1617
import dev.restate.sdk.annotation.VirtualObject;
17-
import dev.restate.sdk.common.CoreSerdes;
1818
import dev.restate.sdk.common.StateKey;
1919
import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder;
2020
import utils.UserProfile;
@@ -27,10 +27,10 @@
2727
public class ProfileService {
2828

2929
private static final StateKey<String> NAME =
30-
StateKey.of("name", CoreSerdes.JSON_STRING);
30+
StateKey.of("name", JsonSerdes.STRING);
3131

3232
private static final StateKey<String> EMAIL =
33-
StateKey.of("email", CoreSerdes.JSON_STRING);
33+
StateKey.of("email", JsonSerdes.STRING);
3434

3535
@Handler
3636
public void registration(ObjectContext ctx, String name){

basics/basics-java/src/main/java/virtual_objects/GreeterObject.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
*/
1111
package virtual_objects;
1212

13+
import dev.restate.sdk.JsonSerdes;
1314
import dev.restate.sdk.ObjectContext;
1415
import dev.restate.sdk.annotation.Handler;
1516
import dev.restate.sdk.annotation.VirtualObject;
16-
import dev.restate.sdk.common.CoreSerdes;
1717
import dev.restate.sdk.common.StateKey;
1818
import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder;
1919

@@ -32,7 +32,7 @@
3232
public class GreeterObject {
3333

3434
private static final StateKey<Integer> COUNT =
35-
StateKey.of("available-drivers", CoreSerdes.JSON_INT);
35+
StateKey.of("available-drivers", JsonSerdes.INT);
3636

3737
@Handler
3838
public String greet(ObjectContext ctx, String greeting) {

basics/basics-typescript/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
"example-4": "ts-node-dev --transpile-only src/4_virtual_objects.ts"
1414
},
1515
"dependencies": {
16-
"@restatedev/restate-sdk": "^0.9.2"
16+
"@restatedev/restate-sdk": "^1.0.0",
17+
"@restatedev/restate-sdk-clients": "^1.0.0"
1718
},
1819
"devDependencies": {
1920
"@restatedev/restate": "^0.9.2",

basics/basics-typescript/src/3_workflows.ts

Lines changed: 60 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*/
1111

1212
import * as restate from "@restatedev/restate-sdk";
13-
import { workflow as wf } from "@restatedev/restate-sdk";
13+
import * as restateClients from "@restatedev/restate-sdk-clients";
1414
import { createUserEntry, sendEmailWithLink } from "./utils/workflow_stubs";
1515

1616
//
@@ -23,87 +23,90 @@ import { createUserEntry, sendEmailWithLink } from "./utils/workflow_stubs";
2323
// Workflow instances always have a unique ID that identifies the workflow execution.
2424
// Each workflow instance (ID) can run only once (to success or failure).
2525
//
26-
const myWorkflow = wf.workflow("usersignup", {
26+
const myWorkflow = restate.workflow({
2727
// --- The workflow logic is in the run() function ---
28+
name: "usersignup",
29+
handlers: {
30+
run: async (ctx: restate.WorkflowContext, params: { name: string; email: string }) => {
31+
const {name, email} = params;
32+
const userId = ctx.key;
33+
34+
// publish state, for the world to see our progress
35+
ctx.set("stage", "Creating User");
36+
37+
// use all the standard durable execution features here
38+
await ctx.run(() => createUserEntry({userId, name}));
39+
40+
ctx.set("stage", "Email Verification");
41+
42+
// send the email with the verification secret
43+
const secret = await ctx.run(() => crypto.randomUUID());
44+
ctx.run(() => sendEmailWithLink({email, secret}));
45+
46+
try {
47+
// the promise here is resolved or rejected by the additional workflow methods below
48+
const clickSecret = await ctx.promise<string>("email-link");
49+
if (clickSecret !== secret) {
50+
throw new restate.TerminalError("Wrong secret from email link");
51+
}
52+
} catch (err: any) {
53+
ctx.set("stage", "Verification failed: " + err.message);
54+
return;
55+
}
2856

29-
run: async (ctx: wf.WfContext, params: { name: string; email: string }) => {
30-
const { name, email } = params;
31-
const userId = ctx.workflowId();
32-
33-
// publish state, for the world to see our progress
34-
ctx.set("stage", "Creating User");
57+
ctx.set("stage", "User verified");
58+
},
3559

36-
// use all the standard durable execution features here
37-
await ctx.run(() => createUserEntry({ userId, name }));
60+
// --- various interactions for queries and signals ---
3861

39-
ctx.set("stage", "Email Verification");
62+
getStage: (ctx: restate.WorkflowSharedContext) => {
63+
// read the state to get the stage where the workflow is
64+
return ctx.get("stage");
65+
},
4066

41-
// send the email with the verification secret
42-
const secret = await ctx.run(() => crypto.randomUUID());
43-
ctx.run(() => sendEmailWithLink({ email, secret }));
67+
verifyEmail: async (ctx: restate.WorkflowSharedContext, request: { secret: string }) => {
68+
// resolve the durable promise to let the awaiter know
69+
await ctx.promise<string>("email-link").resolve(request.secret);
70+
},
4471

45-
try {
46-
// the promise here is resolved or rejected by the additional workflow methods below
47-
const clickSecret = await ctx.promise<string>("email-link");
48-
if (clickSecret !== secret) {
49-
throw new restate.TerminalError("Wrong secret from email link");
50-
}
51-
} catch (err: any) {
52-
ctx.set("stage", "Verification failed: " + err.message);
53-
return;
54-
}
55-
56-
ctx.set("stage", "User verified");
57-
},
58-
59-
// --- various interactions for queries and signals ---
60-
61-
getStage: (ctx: wf.SharedWfContext) => {
62-
// read the state to get the stage where the workflow is
63-
return ctx.get("stage");
64-
},
65-
66-
verifyEmail: async (ctx: wf.SharedWfContext, request: { secret: string }) => {
67-
// resolve the durable promise to let the awaiter know
68-
ctx.promise<string>("email-link").resolve(request.secret);
69-
},
70-
71-
abortVerification: async (ctx: wf.SharedWfContext) => {
72-
// failing the durable promise will throw an Error for the awaiting thread
73-
ctx.promise<string>("email-link").reject("User aborted verification");
74-
},
72+
abortVerification: async (ctx: restate.WorkflowSharedContext) => {
73+
// failing the durable promise will throw an Error for the awaiting thread
74+
await ctx.promise<string>("email-link").reject("User aborted verification");
75+
},
76+
}
7577
});
7678

77-
export const workflowApi = myWorkflow.api;
79+
restate.endpoint().bind(myWorkflow).listen();
80+
81+
export type WorkflowApi = typeof myWorkflow;
7882

7983
// ---------- ⬆️⬆️ deploy this as a container, lambda, etc. ⬆️⬆️ ----------
8084

8185
// start it via an HTTP call.
82-
// `curl restate:8080/usersignup/submit --json '{ "request": {
83-
// "workflowId": "signup-userid1",
84-
// "name": "Bob",
85-
// "email": "[email protected]"
86-
// } }'
86+
// `curl restate:8080/usersignup/signup-userid1/run/send --json '{ "name": "Bob", "email": "bob@builder.com" }'
8787

8888
// or programmatically
8989
async function signupUser(userId: string, name: string, email: string) {
90-
const rs = restate.clients.connect("http://restate:8080");
91-
const { client, status } = await rs.submitWorkflow(workflowApi, "signup-" + userId, {
90+
const rs = restateClients.connect({ url: "http://restate:8080" });
91+
const workflow: WorkflowApi = { name: "usersignup" };
92+
const workflowClient = rs.workflowClient(workflow, "signup-" + userId);
93+
const { status } = await workflowClient.workflowSubmit({
9294
name,
9395
email,
9496
});
9597

96-
if (status != wf.WorkflowStartResult.STARTED) {
98+
if (status != "Accepted") {
9799
throw new Error("User ID already taken");
98100
}
99101

100-
await client.result();
102+
await workflowClient.workflowAttach();
101103
}
102104

103105
// interact with the workflow from any other code
104106
async function verifyEmail(userId: string, emailSecret: string) {
105-
const rs = restate.clients.connect("http://restate:8080");
106-
const { client, status } = await rs.connectToWorkflow(workflowApi, "signup-" + userId);
107+
const rs = restateClients.connect({ url: "http://restate:8080" });
108+
const workflow: WorkflowApi = { name: "usersignup" };
109+
const workflowClient = rs.workflowClient(workflow, "signup-" + userId);
107110

108-
client.workflowInterface().verifyEmail({ secret: emailSecret });
111+
workflowClient.verifyEmail({ secret: emailSecret });
109112
}

end-to-end-applications/java/food-ordering/app/restate-app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ repositories {
1111
mavenCentral()
1212
}
1313

14-
val restateVersion = "0.9.2"
14+
val restateVersion = "1.0.0"
1515

1616
dependencies {
1717
// Restate SDK

end-to-end-applications/java/food-ordering/app/restate-app/src/main/java/dev/restate/sdk/examples/DeliveryManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111

1212
package dev.restate.sdk.examples;
1313

14+
import dev.restate.sdk.JsonSerdes;
1415
import dev.restate.sdk.ObjectContext;
1516
import dev.restate.sdk.annotation.Handler;
1617
import dev.restate.sdk.annotation.VirtualObject;
17-
import dev.restate.sdk.common.CoreSerdes;
1818
import dev.restate.sdk.common.Serde;
1919
import dev.restate.sdk.common.StateKey;
2020
import dev.restate.sdk.common.TerminalException;
@@ -59,7 +59,7 @@ public void start(ObjectContext ctx, DeliveryRequest request) throws TerminalExc
5959
ctx.set(DELIVERY_INFO, deliveryInfo);
6060

6161
// Acquire a driver
62-
var driverAwakeable = ctx.awakeable(CoreSerdes.JSON_STRING);
62+
var driverAwakeable = ctx.awakeable(JsonSerdes.STRING);
6363
DriverDeliveryMatcherClient.fromContext(ctx, GeoUtils.DEMO_REGION)
6464
.send()
6565
.requestDriverForDelivery(driverAwakeable.id());
@@ -119,7 +119,7 @@ public void notifyDeliveryDelivered(ObjectContext ctx) throws TerminalException
119119
ctx.clear(DELIVERY_INFO);
120120

121121
// Notify the OrderService that the delivery has been completed
122-
ctx.awakeableHandle(delivery.getCallbackId()).resolve(CoreSerdes.VOID, null);
122+
ctx.awakeableHandle(delivery.getCallbackId()).resolve(Serde.VOID, null);
123123
}
124124

125125
/**

end-to-end-applications/java/food-ordering/app/restate-app/src/main/java/dev/restate/sdk/examples/DriverDeliveryMatcher.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
package dev.restate.sdk.examples;
1313

1414
import com.fasterxml.jackson.core.type.TypeReference;
15+
import dev.restate.sdk.JsonSerdes;
1516
import dev.restate.sdk.ObjectContext;
1617
import dev.restate.sdk.annotation.Handler;
1718
import dev.restate.sdk.annotation.VirtualObject;
18-
import dev.restate.sdk.common.CoreSerdes;
1919
import dev.restate.sdk.common.StateKey;
2020
import dev.restate.sdk.common.TerminalException;
2121
import dev.restate.sdk.serde.jackson.JacksonSerdes;
@@ -52,7 +52,7 @@ public void setDriverAvailable(ObjectContext ctx, String driverId) throws Termin
5252
// Update the queue in state. Delivery was removed.
5353
ctx.set(PENDING_DELIVERIES, pendingDeliveries);
5454
// Notify that delivery is ongoing
55-
ctx.awakeableHandle(nextDelivery).resolve(CoreSerdes.JSON_STRING, driverId);
55+
ctx.awakeableHandle(nextDelivery).resolve(JsonSerdes.STRING, driverId);
5656
return;
5757
}
5858

@@ -77,7 +77,7 @@ public void requestDriverForDelivery(ObjectContext ctx, String deliveryCallbackI
7777
// Remove driver from the pool
7878
ctx.set(AVAILABLE_DRIVERS, availableDrivers);
7979
// Notify that delivery is ongoing
80-
ctx.awakeableHandle(deliveryCallbackId).resolve(CoreSerdes.JSON_STRING, nextAvailableDriver);
80+
ctx.awakeableHandle(deliveryCallbackId).resolve(JsonSerdes.STRING, nextAvailableDriver);
8181
return;
8282
}
8383

end-to-end-applications/java/food-ordering/app/restate-app/src/main/java/dev/restate/sdk/examples/OrderStatusService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111

1212
package dev.restate.sdk.examples;
1313

14+
import dev.restate.sdk.JsonSerdes;
1415
import dev.restate.sdk.ObjectContext;
1516
import dev.restate.sdk.annotation.Handler;
1617
import dev.restate.sdk.annotation.VirtualObject;
17-
import dev.restate.sdk.common.CoreSerdes;
1818
import dev.restate.sdk.common.StateKey;
1919
import dev.restate.sdk.common.TerminalException;
2020
import dev.restate.sdk.examples.types.StatusEnum;
@@ -25,7 +25,7 @@ public class OrderStatusService {
2525

2626
private static final StateKey<StatusEnum> ORDER_STATUS =
2727
StateKey.of("order-status", JacksonSerdes.of(StatusEnum.class));
28-
private static final StateKey<Long> ORDER_ETA = StateKey.of("order-eta", CoreSerdes.JSON_LONG);
28+
private static final StateKey<Long> ORDER_ETA = StateKey.of("order-eta", JsonSerdes.LONG);
2929

3030
public static class OrderStatus {
3131
private final StatusEnum status;

0 commit comments

Comments
 (0)