diff --git a/apps/canvas/back/index.js b/apps/canvas/back/index.js
index c5ffd89..425285c 100644
--- a/apps/canvas/back/index.js
+++ b/apps/canvas/back/index.js
@@ -98,7 +98,6 @@
         else {
             resp.status(200);
             resp.header("content-type", "application/json");
-            console.log(r);
             if (r.draft == null) {
                 if (r.state == null) {
                     resp.send({
@@ -108,11 +107,11 @@
                     });
                 }
                 else {
-                    resp.send(JSON.parse(r.state.toString()));
+                    resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
                 }
             }
             else {
-                resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
+                resp.send(JSON.parse(Buffer.from(r.draft).toString("utf8")));
             }
         }
     }
@@ -126,30 +125,70 @@
 });
 const handleDeploy = (req, resp) => __awaiter(void 0, void 0, void 0, function* () {
     try {
-        console.log(req.params);
+        const projectId = Number(req.params["projectId"]);
         const state = Buffer.from(JSON.stringify(req.body.state));
+        const p = yield db.project.findUnique({
+            where: {
+                id: projectId,
+            },
+            select: {
+                instanceId: true,
+            }
+        });
+        if (p === null) {
+            resp.status(404);
+            return;
+        }
         yield db.project.update({
             where: {
-                id: Number(req.params["projectId"]),
+                id: projectId,
             },
             data: {
                 draft: state,
             },
         });
-        const r = yield axios_1.default.post("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", { config: req.body.config });
-        if (r.status === 200) {
-            const d = r.data;
-            yield db.project.update({
-                where: {
-                    id: Number(req.params["projectId"]),
-                },
+        let r;
+        if (p.instanceId == null) {
+            r = yield axios_1.default.request({
+                url: "http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app",
+                method: "post",
                 data: {
-                    state,
-                    draft: null,
-                    instanceId: d.id,
-                    deployKey: d.deployKey,
-                },
+                    config: req.body.config,
+                }
             });
+            if (r.status === 200) {
+                yield db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                        instanceId: r.data.id,
+                        deployKey: r.data.deployKey,
+                    },
+                });
+            }
+        }
+        else {
+            r = yield axios_1.default.request({
+                url: `http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app/${p.instanceId}`,
+                method: "put",
+                data: {
+                    config: req.body.config,
+                }
+            });
+            if (r.status === 200) {
+                yield db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                    },
+                });
+            }
         }
     }
     catch (e) {
