diff --git a/backend/src/controllers/postSettings.ts b/backend/src/controllers/postSettings.ts deleted file mode 100644 index b318843..0000000 --- a/backend/src/controllers/postSettings.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {Request, Response} from "express"; -import {NotFoundError} from "../types/error"; -import {createTerraformSettings} from "./terraform"; - -export default (req: Request, res: Response) => { - if (req.body.tool == "terraform") { - createTerraformSettings(req, res); - } else { - res.status(404).json( - new NotFoundError(req.body.tool, req.originalUrl).toResponse() - ); - } -}; diff --git a/backend/src/controllers/settings.ts b/backend/src/controllers/settings.ts new file mode 100644 index 0000000..ee72a4b --- /dev/null +++ b/backend/src/controllers/settings.ts @@ -0,0 +1,33 @@ +import {Request, Response} from "express"; +import {NotFoundError} from "../types/error"; +import {createTerraformSettings} from "./terraform"; +import {internalErrorHandler} from "../types/errorHandler"; +import {RepoSettings} from "../database/repoSettings"; + +export const postSettings = (req: Request, res: Response) => { + if (req.body.tool == "terraform") { + RepoSettings.updateOne( + {repo: req.body.repo}, + {repo: req.body.repo, terraformSettings: req.body.settings}, + {upsert: true} + ); + createTerraformSettings(req, res); + } else { + res.status(404).json( + new NotFoundError(req.body.tool, req.originalUrl).toResponse() + ); + } +}; + +export const getSettings = (req: Request, res: Response) => { + RepoSettings.findOne( + {repo: req.headers.repo}, + (err: Error, settings: any) => { + if (err) { + internalErrorHandler(req, res)(err); + } else { + res.json(settings); + } + } + ); +}; diff --git a/backend/src/database/repoSettings.ts b/backend/src/database/repoSettings.ts new file mode 100644 index 0000000..5092d2d --- /dev/null +++ b/backend/src/database/repoSettings.ts @@ -0,0 +1,36 @@ +import {mongoose} from "./connection"; +const {Schema} = mongoose; + +//================================ Terraform ====================================// +export interface terraformResource { + type: string; + id: string; + ami: string; + instance_type: string; +} + +export interface terraformSettings { + provider: string; + resources: [terraformResource]; +} + +export const terraformResourceSchema = new Schema({ + type: String, + id: String, + ami: String, + instance_type: String +}); + +export const terraformSettingsSchema = new Schema({ + provider: String, + resources: [terraformResourceSchema] +}); + +//================================ Repo ====================================// + +export const repoSettingsSchema = new Schema({ + repo: {type: String, required: true, unique: true}, + terraformSettings: terraformSettingsSchema +}); + +export const RepoSettings = mongoose.model("RepoSettings", repoSettingsSchema); diff --git a/backend/src/routes/v1.ts b/backend/src/routes/v1.ts index c418e13..d0f4b4c 100644 --- a/backend/src/routes/v1.ts +++ b/backend/src/routes/v1.ts @@ -1,7 +1,7 @@ // Imports import {Router} from "express"; import {getRepoList} from "../controllers/getRepoList"; -import postSettings from "../controllers/postSettings"; +import {postSettings, getSettings} from "../controllers/settings"; import {settingsValidator} from "../validators/terraformValidator"; const apiV1Router = Router(); @@ -18,6 +18,7 @@ apiV1Router.get("/", (_req, res) => apiV1Router.get("/repo", getRepoList); apiV1Router.post("/settings", settingsValidator, postSettings); +apiV1Router.get("/settings", getSettings); //Edit terraform settings //apiV1Router.patch("/terraform", TODO); diff --git a/frontend/src/pages/toolManager.tsx b/frontend/src/pages/toolManager.tsx index 0b3fa9c..b8ab093 100644 --- a/frontend/src/pages/toolManager.tsx +++ b/frontend/src/pages/toolManager.tsx @@ -19,6 +19,18 @@ export default function ToolManager() { const setSelectedRepoFromDrawer = (repo_full_name: string) => { setSelectedRepo(repo_full_name); console.dir(repo_full_name); + axios + .get(`https://${CONFIG.BACKEND_URL}${CONFIG.SETTINGS_PATH}`, { + headers: { + repo: repo_full_name + } + }) + .then((response: any) => { + console.dir(response.data); + }) + .catch((error: any) => { + console.error(error); + }); }; const setSelectedToolCardCallback = (tool_name: string) => {