diff --git a/server/src/db/db_init.ts b/server/src/db/db_init.ts index bdffe46586e14ad329b86eb938f6c880b9f7f267..91e76f91d98a7720fe557b738ecc2ecb11531694 100644 --- a/server/src/db/db_init.ts +++ b/server/src/db/db_init.ts @@ -2,15 +2,18 @@ import Customer from "./models/Customer"; import Boat from "./models/Boat"; import Worker from "./models/Worker"; import CheckIn from "./models/CheckIn"; +import { checkDB } from "./seqConnection"; const isDev = process.env.NODE_ENV === "development"; -const dbInit = () => - Promise.all([ - Customer.sync({ alter: isDev }), - Boat.sync({ alter: isDev }), - Worker.sync({ alter: isDev }), - CheckIn.sync({ alter: isDev }), - ]); - -export default dbInit; +const dbInit = async () => { + await Customer.sync({ alter: isDev }); + await Boat.sync({ alter: isDev }); + await Worker.sync({ alter: isDev }); + await CheckIn.sync({ alter: isDev }); +}; +const connectAndInit = async () => { + await checkDB(); + await dbInit(); +}; +export default connectAndInit; diff --git a/server/src/db/seqConnection.ts b/server/src/db/seqConnection.ts index ca83895f83f22b73a5886e56d446ceb533449f7d..303c83c1772cf087af13c7a812e888927eb66ea3 100644 --- a/server/src/db/seqConnection.ts +++ b/server/src/db/seqConnection.ts @@ -1,7 +1,8 @@ -import envVars from "./config"; import { Sequelize } from "sequelize"; +import envVars from "./config"; +import { Client } from "pg"; -const sequelizeConnection = new Sequelize( +let sequelizeConnection = new Sequelize( envVars.dbName, envVars.dbUser, envVars.dbPassword, @@ -11,12 +12,40 @@ const sequelizeConnection = new Sequelize( logging: false, } ); -export const testConnection = async () => { - try { - await sequelizeConnection.authenticate(); - console.log("Connection has been established successfully."); - } catch (error) { - console.error("Unable to connect to the database:", error); - } +//check if DB in env exists. If not, create a one +export const checkDB = async () => { + const client = new Client({ + host: envVars.dbHost, + port: 5432, //envVars.dbPort does not exist! + user: envVars.dbUser, + password: envVars.dbPassword, + }); + await client.connect(); + + //search for db in pg-catalog. if not found, create a one + await client + .query(`SELECT * FROM pg_database WHERE datname = '${envVars.dbName}'`) + .then((res) => { + //------------------------------------------------then + if (res.rows.length === 0) { + //given db not found + console.log( + `${envVars.dbName} not found!\n${envVars.dbName} created..!` + ); + client.query(`CREATE DATABASE "${envVars.dbName}"`); + sequelizeConnection = new Sequelize( + envVars.dbName, + envVars.dbUser, + envVars.dbPassword, + { + host: envVars.dbHost, + dialect: envVars.dbDriver, + logging: false, + } + ); + } else { + console.log("-------\nres:\n", res.rows); + } + }); }; export default sequelizeConnection; diff --git a/server/src/db/showDBTables.ts b/server/src/db/showDBTables.ts new file mode 100644 index 0000000000000000000000000000000000000000..1c128341bc89b34930515c2f0fa216916605459a --- /dev/null +++ b/server/src/db/showDBTables.ts @@ -0,0 +1,18 @@ +import sequelizeConnection from "./seqConnection"; +import { QueryTypes } from "sequelize"; +import envVars from "./config"; + +const showTables = async () => { + //list all tables of the actual database + sequelizeConnection + .query( + `SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='${envVars.dbName}' AND TABLE_SCHEMA='public';`, + { type: QueryTypes.SELECT } + ) + .then((res) => { + //------------------------------------------------then + console.log(`TABELS IN ${envVars.dbName}\n-------------\n`, res); + }); +}; + +export default showTables; diff --git a/server/src/server.ts b/server/src/server.ts index 75e4e4715c979fbafdc73d9c7bae6f30ce3d2bc4..c759b0c653b30e15f9c3a9daa6b03cf42a94a286 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -1,16 +1,14 @@ import "dotenv/config"; import express from "express"; -import dbInit from "./db/db_init"; -import { testConnection } from "./db/seqConnection"; -//import apiRouter from "./routes"; +import connectAndInit from "./db/db_init"; +import showTables from "./db/showDBTables"; let init = async () => { - testConnection(); - await dbInit(); + await connectAndInit(); + await showTables(); const app = express(); app.use(express.json()); - //app.use(apiRouter); const port = process.env.PORT || 4000; app.listen(port, () => console.log(`Server listening on port: ${port}`)); app.get("/", (req, res) => res.send("hello in server"));