Merge branch 'julius-dev' of Software_Engineering_I/greenvironment-server into develop

pull/1/head
Trivernis 5 years ago committed by Gitea
commit 1c4e586596

@ -79,6 +79,15 @@ export class QueryHelper {
this.pool = pgPool; this.pool = pgPool;
} }
/**
* Async init function
*/
public async init() {
await this.pool.connect();
await this.createTables();
await this.updateTableDefinitions();
}
/** /**
* creates all tables needed if a filepath was given with the constructor * creates all tables needed if a filepath was given with the constructor
*/ */
@ -86,7 +95,18 @@ export class QueryHelper {
if (this.tableCreationFile) { if (this.tableCreationFile) {
logger.info("Creating nonexistent tables..."); logger.info("Creating nonexistent tables...");
const tableSql = await fsx.readFile(this.tableCreationFile, "utf-8"); const tableSql = await fsx.readFile(this.tableCreationFile, "utf-8");
await this.query({text: tableSql}); const trans = await this.createTransaction();
await trans.begin();
try {
await trans.query({text: tableSql});
await trans.commit();
} catch (err) {
globals.logger.error(`Error on table creation ${err.message}`);
globals.logger.debug(err.stack);
await trans.rollback();
} finally {
trans.release();
}
} }
} }
@ -97,7 +117,18 @@ export class QueryHelper {
if (this.tableUpdateFile) { if (this.tableUpdateFile) {
logger.info("Updating table definitions..."); logger.info("Updating table definitions...");
const tableSql = await fsx.readFile(this.tableUpdateFile, "utf-8"); const tableSql = await fsx.readFile(this.tableUpdateFile, "utf-8");
await this.query({text: tableSql}); const trans = await this.createTransaction();
await trans.begin();
try {
await trans.query({text: tableSql});
await trans.commit();
} catch (err) {
globals.logger.error(`Error on table update ${err.message}`);
globals.logger.debug(err.stack);
await trans.rollback();
} finally {
trans.release();
}
} }
} }

@ -42,8 +42,12 @@ namespace dataaccess {
* Initializes everything that needs to be initialized asynchronous. * Initializes everything that needs to be initialized asynchronous.
*/ */
export async function init() { export async function init() {
await queryHelper.createTables(); try {
await queryHelper.updateTableDefinitions(); await queryHelper.init();
} catch (err) {
globals.logger.error(err.message);
globals.logger.debug(err.stack);
}
} }
/** /**

@ -15,20 +15,6 @@ DO $$BEGIN
END $BODY$; END $BODY$;
END IF; END IF;
IF NOT function_exists('cast_to_votetype') THEN
CREATE FUNCTION cast_to_votetype(text) RETURNS votetype LANGUAGE plpgsql AS $BODY$
BEGIN
RETURN CASE WHEN $1::votetype IS NULL THEN 'UPVOTE' ELSE $1::votetype END;
END $BODY$;
END IF;
IF NOT function_exists('cast_to_posttype') THEN
CREATE FUNCTION cast_to_posttype(text) RETURNS posttype LANGUAGE plpgsql AS $BODY$
BEGIN
RETURN CASE WHEN $1::posttype IS NULL THEN 'MISC' ELSE $1::posttype END;
END $BODY$;
END IF;
END$$; END$$;
--create types --create types
@ -48,7 +34,28 @@ DO $$ BEGIN
END$$; END$$;
-- create functions relying on types
DO $$ BEGIN
IF NOT function_exists('cast_to_votetype') THEN
CREATE FUNCTION cast_to_votetype(text) RETURNS votetype LANGUAGE plpgsql AS $BODY$
BEGIN
RETURN CASE WHEN $1::votetype IS NULL THEN 'UPVOTE' ELSE $1::votetype END;
END $BODY$;
END IF;
IF NOT function_exists('cast_to_posttype') THEN
CREATE FUNCTION cast_to_posttype(text) RETURNS posttype LANGUAGE plpgsql AS $BODY$
BEGIN
RETURN CASE WHEN $1::posttype IS NULL THEN 'MISC' ELSE $1::posttype END;
END $BODY$;
END IF;
END$$;
-- create tables -- create tables
DO $$ BEGIN
CREATE TABLE IF NOT EXISTS "user_sessions" ( CREATE TABLE IF NOT EXISTS "user_sessions" (
"sid" varchar NOT NULL, "sid" varchar NOT NULL,
@ -126,3 +133,5 @@ CREATE TABLE IF NOT EXISTS requests (
type requesttype DEFAULT 'FRIENDREQUEST', type requesttype DEFAULT 'FRIENDREQUEST',
PRIMARY KEY (sender, receiver, type) PRIMARY KEY (sender, receiver, type)
); );
END $$;

Loading…
Cancel
Save