From af790fb903ae03703a37e14b67a5fc83e0172ec9 Mon Sep 17 00:00:00 2001 From: Mithi Date: Tue, 3 Nov 2020 17:44:59 +0800 Subject: [PATCH 1/3] FIX: Install packages first when setting up --- scripts/run_setup.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/run_setup.sh b/scripts/run_setup.sh index c828720..7861617 100644 --- a/scripts/run_setup.sh +++ b/scripts/run_setup.sh @@ -1,9 +1,9 @@ +# install packages +npm install; + # Create databases: kingdom_rush_db, test_db, empty_test_db npm run db:create; -# install packages -#npm install; - # copy .env.sample to .env cp .env.sample .env; @@ -11,11 +11,9 @@ cp .env.sample .env; npm run db:migrate; # Populate kingdom_rush_db from yaml to json to database tables to csv +# then populates test_db with csv data npm run db:update-data; -# Populate test_db -psql kingdom_rush_user -h localhost -d test_db -f ./scripts/db_load_csv.sql; - # Print the information about the test_db psql kingdom_rush_user -h localhost -d test_db --pset=pager -f ./scripts/db_gen_info.sql; psql kingdom_rush_user -h localhost -d test_db --pset=pager -f ./scripts/db_table_info.sql; From 9293038cce426c50b3fedb322d68232fc4e5dcc2 Mon Sep 17 00:00:00 2001 From: Mithi Date: Tue, 3 Nov 2020 17:45:55 +0800 Subject: [PATCH 2/3] Rename constraints from autogenerated to more meaningful names --- .../1604386074135-RenameConstraints.ts | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/migrations/1604386074135-RenameConstraints.ts diff --git a/src/migrations/1604386074135-RenameConstraints.ts b/src/migrations/1604386074135-RenameConstraints.ts new file mode 100644 index 0000000..9e8ea50 --- /dev/null +++ b/src/migrations/1604386074135-RenameConstraints.ts @@ -0,0 +1,103 @@ +import { MigrationInterface, QueryRunner } from "typeorm" + +/* +********* +'UNIQUE' +********* + constraint_name | table_name | column_name | foreign_table_name | foreign_column_name +--------------------------------+----------------+-------------+--------------------+--------------------- + REL_38a6e0a47022a1c957b9018646 | main_stats | towerId | main_stats | towerId + REL_d5dcdad1a2b257a2445db6106f | barracks_stats | towerId | barracks_stats | towerId + REL_a183facc6b66a4851553798f60 | attack_stats | towerId | attack_stats | towerId + unique_tower | Towers | name | Towers | name + unique_tower | Towers | name | Towers | kingdom + unique_tower | Towers | kingdom | Towers | name + unique_tower | Towers | kingdom | Towers | kingdom + REL_c598f4f8ace2c65225b034987f | build_sequence | level4Id | build_sequence | level4Id +(8 rows) + +************* +'PRIMARY KEY' +************* + constraint_name | table_name | column_name | foreign_table_name | foreign_column_name +--------------------------------+----------------+-------------+--------------------+--------------------- + PK_8c82d7f526340ab734260ea46be | migrations | id | migrations | id + PK_a9fe6ef57784aff6b73159e9b4d | main_stats | id | main_stats | id + PK_06005d4dc8ba963484acae34726 | barracks_stats | id | barracks_stats | id + PK_e7cb32239cb7dfd5eebae4d0eaf | attack_stats | id | attack_stats | id + PK_d35a4e5481305c4848b560a3354 | Towers | id | Towers | id + PK_433b7560ea75956d78120228a2c | ability_level | id | ability_level | id + PK_5643559d435d01ec126981417a2 | ability | id | ability | id + PK_11cbd4cf88c203da6f6e0c22dbe | build_sequence | id | build_sequence | id +(8 rows) + +************* +'FOREIGN KEY' +************* + constraint_name | table_name | column_name | foreign_table_name | foreign_column_name +--------------------------------+----------------+-------------+--------------------+--------------------- + FK_38a6e0a47022a1c957b90186462 | main_stats | towerId | Towers | id + FK_d5dcdad1a2b257a2445db6106fb | barracks_stats | towerId | Towers | id + FK_a183facc6b66a4851553798f608 | attack_stats | towerId | Towers | id + FK_0d9185e58cdacbdb7787c410d62 | ability_level | abilityId | ability | id + FK_b8d8816b111ff43dc4f8a9f6afe | ability | towerId | Towers | id + FK_a0485cb10760fbbe70d7bfea439 | build_sequence | level1Id | Towers | id + FK_e7720dd1227b31428bdd710bac9 | build_sequence | level2Id | Towers | id + FK_fbdaaafa5aaf958509352c74637 | build_sequence | level3Id | Towers | id + FK_c598f4f8ace2c65225b034987f3 | build_sequence | level4Id | Towers | id + +*/ + +export class RenameConstraints1604386074135 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "main_stats" RENAME CONSTRAINT "REL_38a6e0a47022a1c957b9018646" TO "UNIQUE_main_stats_towerId"; + ALTER TABLE "barracks_stats" RENAME CONSTRAINT "REL_d5dcdad1a2b257a2445db6106f" TO "UNIQUE_barracks_stats_towerId"; + ALTER TABLE "attack_stats" RENAME CONSTRAINT "REL_a183facc6b66a4851553798f60" TO "UNIQUE_attack_stats_towerId"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "REL_c598f4f8ace2c65225b034987f" TO "UNIQUE_build_sequence_level4Id"; + ALTER TABLE "migrations" RENAME CONSTRAINT "PK_8c82d7f526340ab734260ea46be" TO "PK_migrations_id"; + ALTER TABLE "main_stats" RENAME CONSTRAINT "PK_a9fe6ef57784aff6b73159e9b4d" TO "PK_main_stats_id"; + ALTER TABLE "barracks_stats" RENAME CONSTRAINT "PK_06005d4dc8ba963484acae34726" TO "PK_barracks_stats_id"; + ALTER TABLE "attack_stats" RENAME CONSTRAINT "PK_e7cb32239cb7dfd5eebae4d0eaf" TO "PK_attack_stats_id"; + ALTER TABLE "Towers" RENAME CONSTRAINT "PK_d35a4e5481305c4848b560a3354" TO "PK_Towers_id"; + ALTER TABLE "ability_level" RENAME CONSTRAINT "PK_433b7560ea75956d78120228a2c" TO "PK_ability_level_id"; + ALTER TABLE "ability" RENAME CONSTRAINT "PK_5643559d435d01ec126981417a2" TO "PK_ability_id"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "PK_11cbd4cf88c203da6f6e0c22dbe" TO "PK_build_sequence_id"; + ALTER TABLE "main_stats" RENAME CONSTRAINT "FK_38a6e0a47022a1c957b90186462" TO "FK_main_stats_towerId__Towers_id"; + ALTER TABLE "barracks_stats" RENAME CONSTRAINT "FK_d5dcdad1a2b257a2445db6106fb" TO "FK_barracks_stats_towerId__Towers_id"; + ALTER TABLE "attack_stats" RENAME CONSTRAINT "FK_a183facc6b66a4851553798f608" TO "FK_attack_stats_towerId__Towers_id"; + ALTER TABLE "ability_level" RENAME CONSTRAINT "FK_0d9185e58cdacbdb7787c410d62" TO "FK_ability_level_abilityId__ability_id"; + ALTER TABLE "ability" RENAME CONSTRAINT "FK_b8d8816b111ff43dc4f8a9f6afe" TO "FK_ability_towerId__Towers_id"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "FK_a0485cb10760fbbe70d7bfea439" TO "FK_build_sequence_level1Id__Towers_id"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "FK_e7720dd1227b31428bdd710bac9" TO "FK_build_sequence_level2Id__Towers_id"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "FK_fbdaaafa5aaf958509352c74637" TO "FK_build_sequence_level3Id__Towers_id"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "FK_c598f4f8ace2c65225b034987f3" TO "FK_build_sequence_level4Id__Towers_id"; + `) + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "build_sequence" RENAME CONSTRAINT "FK_build_sequence_level4Id__Towers_id" TO "FK_c598f4f8ace2c65225b034987f3"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "FK_build_sequence_level3Id__Towers_id" TO "FK_fbdaaafa5aaf958509352c74637"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "FK_build_sequence_level2Id__Towers_id" TO "FK_e7720dd1227b31428bdd710bac9"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "FK_build_sequence_level1Id__Towers_id" TO "FK_a0485cb10760fbbe70d7bfea439"; + ALTER TABLE "ability" RENAME CONSTRAINT "FK_ability_towerId__Towers_id" TO "FK_b8d8816b111ff43dc4f8a9f6afe"; + ALTER TABLE "ability_level" RENAME CONSTRAINT "FK_ability_level_abilityId__ability_id" TO "FK_0d9185e58cdacbdb7787c410d62"; + ALTER TABLE "attack_stats" RENAME CONSTRAINT "FK_attack_stats_towerId__Towers_id" TO "FK_a183facc6b66a4851553798f608"; + ALTER TABLE "barracks_stats" RENAME CONSTRAINT "FK_barracks_stats_towerId__Towers_id" TO "FK_d5dcdad1a2b257a2445db6106fb"; + ALTER TABLE "main_stats" RENAME CONSTRAINT "FK_main_stats_towerId__Towers_id" TO "FK_38a6e0a47022a1c957b90186462"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "PK_build_sequence_id" TO "PK_11cbd4cf88c203da6f6e0c22dbe"; + ALTER TABLE "ability" RENAME CONSTRAINT "PK_ability_id" TO "PK_5643559d435d01ec126981417a2"; + ALTER TABLE "ability_level" RENAME CONSTRAINT "PK_ability_level_id" TO "PK_433b7560ea75956d78120228a2c"; + ALTER TABLE "Towers" RENAME CONSTRAINT "PK_Towers_id" TO "PK_d35a4e5481305c4848b560a3354"; + ALTER TABLE "attack_stats" RENAME CONSTRAINT "PK_attack_stats_id" TO "PK_e7cb32239cb7dfd5eebae4d0eaf"; + ALTER TABLE "barracks_stats" RENAME CONSTRAINT "PK_barracks_stats_id" TO "PK_06005d4dc8ba963484acae34726"; + ALTER TABLE "main_stats" RENAME CONSTRAINT "PK_main_stats_id" TO "PK_a9fe6ef57784aff6b73159e9b4d"; + ALTER TABLE "migrations" RENAME CONSTRAINT "PK_migrations_id" TO "PK_8c82d7f526340ab734260ea46be"; + ALTER TABLE "build_sequence" RENAME CONSTRAINT "UNIQUE_build_sequence_level4Id" TO "REL_c598f4f8ace2c65225b034987f"; + ALTER TABLE "attack_stats" RENAME CONSTRAINT "UNIQUE_attack_stats_towerId" TO "REL_a183facc6b66a4851553798f60"; + ALTER TABLE "barracks_stats" RENAME CONSTRAINT "UNIQUE_barracks_stats_towerId" TO "REL_d5dcdad1a2b257a2445db6106f"; + ALTER TABLE "main_stats" RENAME CONSTRAINT "UNIQUE_main_stats_towerId" TO "REL_38a6e0a47022a1c957b9018646"; + `) + } +} From 6e51bdcde2956e31074a040c56dcbdf3ce775782 Mon Sep 17 00:00:00 2001 From: Mithi Date: Tue, 3 Nov 2020 18:03:09 +0800 Subject: [PATCH 3/3] Improve logging format when seeding database --- src/seed/AttackStats.ts | 18 +++++++++++------- src/seed/BarracksStats.ts | 14 +++++++------- src/seed/BuildSequence.ts | 8 +------- src/seed/Tower.ts | 14 +++++++------- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/seed/AttackStats.ts b/src/seed/AttackStats.ts index 24cb231..edc2def 100644 --- a/src/seed/AttackStats.ts +++ b/src/seed/AttackStats.ts @@ -24,10 +24,6 @@ type AttacksData = { const populateAttackStats = async ({ dbName = "default", verbose = true } = {}) => { const attackTowers: [AttacksData] = attackJson.towers for (let tower of attackTowers) { - if (verbose) { - console.log("...") - console.log(tower.name, "|", tower.kingdom) - } let retrievedTower = await getRepository(Tower, dbName).findOne({ where: { name: tower.name, @@ -39,7 +35,10 @@ const populateAttackStats = async ({ dbName = "default", verbose = true } = {}) if (!retrievedTower) { if (verbose) { console.log( - "> The tower you want to populate attack stats does not exist" + "> The tower you want to populate attack stats does not exist", + tower.name, + "|", + tower.kingdom ) } continue @@ -47,7 +46,12 @@ const populateAttackStats = async ({ dbName = "default", verbose = true } = {}) if (retrievedTower.attackStats) { if (verbose) { - console.log("> This tower already has attack stats") + console.log( + "> This tower already has attack stats", + tower.name, + "|", + tower.kingdom + ) } continue } @@ -60,7 +64,7 @@ const populateAttackStats = async ({ dbName = "default", verbose = true } = {}) try { await getRepository(Tower, dbName).save(retrievedTower) if (verbose) { - console.log("> Attack stats saved.") + console.log("> Attack stats saved.", tower.name, "|", tower.kingdom) } } catch (error) { logError(error) diff --git a/src/seed/BarracksStats.ts b/src/seed/BarracksStats.ts index de49a2d..27ea9c3 100644 --- a/src/seed/BarracksStats.ts +++ b/src/seed/BarracksStats.ts @@ -25,11 +25,6 @@ type BarracksData = { const populateBarracksStats = async ({ dbName = "default", verbose = true } = {}) => { const barracks: [BarracksData] = (barracksJson).towers for (let tower of barracks) { - if (verbose) { - console.log("...") - console.log(tower.name, "|", tower.kingdom) - } - let retrievedTower = await getRepository(Tower, dbName).findOne({ where: { name: tower.name, @@ -49,7 +44,12 @@ const populateBarracksStats = async ({ dbName = "default", verbose = true } = {} if (retrievedTower.barracksStats) { if (verbose) { - console.log("> This tower already has barracks stats.") + console.log( + "> This tower already has barracks stats.", + tower.name, + "|", + tower.kingdom + ) } continue } @@ -64,7 +64,7 @@ const populateBarracksStats = async ({ dbName = "default", verbose = true } = {} try { await getRepository(Tower, dbName).save(retrievedTower) if (verbose) { - console.log("Barracks stats saved.") + console.log("Barracks stats saved.", tower.name, "|", tower.kingdom) } } catch (error) { logError(error) diff --git a/src/seed/BuildSequence.ts b/src/seed/BuildSequence.ts index 54f9bed..8804b77 100644 --- a/src/seed/BuildSequence.ts +++ b/src/seed/BuildSequence.ts @@ -37,12 +37,6 @@ const populateBuildSequence = async ({ dbName = "default", verbose = true } = {} ], }) - if (verbose) { - console.log("...") - console.log("BUILD SEQUENCE", buildSequenceData) - console.log("RESULT", retrievedTowers) - } - let buildSequence = new BuildSequence() retrievedTowers.forEach(tower => { if (tower.level === 1) { @@ -81,7 +75,7 @@ const populateBuildSequence = async ({ dbName = "default", verbose = true } = {} console.log("ERROR", e, buildSequence) } if (verbose) { - console.log("saved buildSequence", buildSequence) + console.log("saved buildSequence.", buildSequence.level4.name) } } } diff --git a/src/seed/Tower.ts b/src/seed/Tower.ts index bc56a5f..73b29a7 100644 --- a/src/seed/Tower.ts +++ b/src/seed/Tower.ts @@ -74,11 +74,6 @@ const mapStringToTowerType = { const populateTowers = async ({ dbName = "default", verbose = true } = {}) => { const towers: [TowerData] = (towerJson).towers for (let tower of towers) { - if (verbose) { - console.log("...") - console.log(tower.name, "|", tower.kingdom) - } - const newTower = new Tower() newTower.name = tower.name newTower.towerType = mapStringToTowerType[tower.towerType] @@ -95,7 +90,7 @@ const populateTowers = async ({ dbName = "default", verbose = true } = {}) => { await getRepository(Tower, dbName).save(newTower) if (verbose) { - console.log("> Tower saved.") + console.log("> Tower saved.", tower.name, "|", tower.kingdom) } } catch (error) { logError(error) @@ -125,7 +120,12 @@ const populateImageUrls = async ({ dbName = "default", verbose = true } = {}) => if (retrievedTower.imageUrl) { if (verbose) { - console.log("> This tower already has an image url") + console.log( + "> This tower already has an image url", + tower.name, + "|", + tower.kingdom + ) } continue }