Canvas: Edit/Deploy mode

Change-Id: I51e5b6c2a1f06009433b0d0824ffcf3dfe39d34e
diff --git a/apps/canvas/back/src/index.ts b/apps/canvas/back/src/index.ts
index 653eeaa..3c276d7 100644
--- a/apps/canvas/back/src/index.ts
+++ b/apps/canvas/back/src/index.ts
@@ -79,24 +79,26 @@
 	}
 };
 
-const handleSavedGet: express.Handler = async (req, resp) => {
-	try {
-		const r = await db.project.findUnique({
-			where: {
-				id: Number(req.params["projectId"]),
-				userId: resp.locals.userId,
-			},
-			select: {
-				state: true,
-				draft: true,
-			},
-		});
-		if (r == null) {
-			resp.status(404);
-		} else {
+function handleSavedGet(state: "deploy" | "draft"): express.Handler {
+	return async (req, resp) => {
+		try {
+			const r = await db.project.findUnique({
+				where: {
+					id: Number(req.params["projectId"]),
+					userId: resp.locals.userId,
+				},
+				select: {
+					state: true,
+					draft: true,
+				},
+			});
+			if (r == null) {
+				resp.status(404);
+				return;
+			}
 			resp.status(200);
 			resp.header("content-type", "application/json");
-			if (r.draft == null) {
+			if (state === "deploy") {
 				if (r.state == null) {
 					resp.send({
 						nodes: [],
@@ -107,16 +109,28 @@
 					resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
 				}
 			} else {
-				resp.send(JSON.parse(Buffer.from(r.draft).toString("utf8")));
+				if (r.draft == null) {
+					if (r.state == null) {
+						resp.send({
+							nodes: [],
+							edges: [],
+							viewport: { x: 0, y: 0, zoom: 1 },
+						});
+					} else {
+						resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
+					}
+				} else {
+					resp.send(JSON.parse(Buffer.from(r.draft).toString("utf8")));
+				}
 			}
+		} catch (e) {
+			console.log(e);
+			resp.status(500);
+		} finally {
+			resp.end();
 		}
-	} catch (e) {
-		console.log(e);
-		resp.status(500);
-	} finally {
-		resp.end();
-	}
-};
+	};
+}
 
 const handleDelete: express.Handler = async (req, resp) => {
 	try {
@@ -554,7 +568,8 @@
 	app.use(express.json());
 	app.use(auth);
 	app.post("/api/project/:projectId/saved", handleSave);
-	app.get("/api/project/:projectId/saved", handleSavedGet);
+	app.get("/api/project/:projectId/saved/deploy", handleSavedGet("deploy"));
+	app.get("/api/project/:projectId/saved/draft", handleSavedGet("draft"));
 	app.post("/api/project/:projectId/deploy", handleDeploy);
 	app.get("/api/project/:projectId/status", handleStatus);
 	app.delete("/api/project/:projectId", handleDelete);