Canvas: Issue update if previously deployed
Change-Id: I7ffbba814154eb9129fbe035ce15278cb8e25fe9
diff --git a/.gitignore b/.gitignore
index a4db0a6..ced49da 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,4 +17,6 @@
.vscode/
.hugo_build.lock
dist
-node_modules
\ No newline at end of file
+node_modules
+prisma
+*.db
\ No newline at end of file
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) {
diff --git a/apps/canvas/back/index.ts b/apps/canvas/back/index.ts
index b103756..6193a90 100644
--- a/apps/canvas/back/index.ts
+++ b/apps/canvas/back/index.ts
@@ -82,19 +82,18 @@
} else {
resp.status(200);
resp.header("content-type", "application/json");
- console.log(r);
if (r.draft == null) {
if (r.state == null) {
resp.send({
- nodes: [],
+ nodes: [],
edges: [],
- viewport: { x: 0, y: 0, zoom: 1},
- });
+ viewport: { x: 0, y: 0, zoom: 1 },
+ });
} 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")));
}
}
} catch (e) {
@@ -107,30 +106,69 @@
const handleDeploy: express.Handler = async (req, resp) => {
try {
- console.log(req.params);
+ const projectId = Number(req.params["projectId"]);
const state = Buffer.from(JSON.stringify(req.body.state));
+ const p = await db.project.findUnique({
+ where: {
+ id: projectId,
+ },
+ select: {
+ instanceId: true,
+ }
+ });
+ if (p === null) {
+ resp.status(404);
+ return;
+ }
await db.project.update({
where: {
- id: Number(req.params["projectId"]),
+ id: projectId,
},
data: {
draft: state,
},
});
- const r = await axios.post("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", { config: req.body.config });
- if (r.status === 200) {
- const d = r.data as { id: string, deployKey: string };
- await db.project.update({
- where: {
- id: Number(req.params["projectId"]),
- },
+ let r: { status: number, data: { id: string, deployKey: string } };
+ if (p.instanceId == null) {
+ r = await axios.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) {
+ await db.project.update({
+ where: {
+ id: projectId,
+ },
+ data: {
+ state,
+ draft: null,
+ instanceId: r.data.id,
+ deployKey: r.data.deployKey,
+ },
+ });
+ }
+ } else {
+ r = await axios.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) {
+ await db.project.update({
+ where: {
+ id: projectId,
+ },
+ data: {
+ state,
+ draft: null,
+ },
+ });
+ }
}
} catch (e) {
console.log(e);
diff --git a/apps/canvas/back/prisma/dodo.db b/apps/canvas/back/prisma/dodo.db
index 452bd48..3bd29ba 100644
--- a/apps/canvas/back/prisma/dodo.db
+++ b/apps/canvas/back/prisma/dodo.db
Binary files differ