Skip to content

Commit

Permalink
migrations
Browse files Browse the repository at this point in the history
  • Loading branch information
uzairname committed Jan 25, 2024
1 parent d751e0c commit 81c4363
Show file tree
Hide file tree
Showing 16 changed files with 123 additions and 3,658 deletions.
2 changes: 1 addition & 1 deletion migrations/migrate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import * as dotenv from 'dotenv'
import { sql } from 'drizzle-orm'


const matches_trigger_query = sql.raw(`
export const matches_trigger_query = sql.raw(`
CREATE OR REPLACE FUNCTION "Matches_number_trigger_function"()
RETURNS TRIGGER AS $$
BEGIN
Expand Down
105 changes: 39 additions & 66 deletions migrations/migrate_12-6-2023.ts → migrations/migrate_1-25-2024.ts
Original file line number Diff line number Diff line change
@@ -1,37 +1,14 @@
import pg from 'pg'

import fastcsv from 'fast-csv'
import fs from 'fs'
import dotenv from 'dotenv'

import postgres from 'postgres'
import { drizzle } from 'drizzle-orm/postgres-js'
import { migrate } from 'drizzle-orm/postgres-js/migrator'
import { matches_trigger_query } from './migrate'

dotenv.config()

async function download() {
// download all tables from database as csv files
const pool = new pg.Pool({
connectionString: process.env.POSTGRES_URL_PRODUCTION_OLD,
ssl: true,
})

const client = await pool.connect()
const res = await client.query(
"SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE';",
)
const tables = res.rows.map((row) => row.table_name)

console.log(tables)

for (const table of tables) {
const res = await client.query(`SELECT * FROM "${table}";`)
const rows = res.rows
// create csv file if not exists
const ws = fs.createWriteStream(`temp_data/${table}.csv`)
fastcsv.write(rows, { headers: true }).pipe(ws)
}
}

async function transfer() {

const client_old = await new pg.Pool({
connectionString: process.env.POSTGRES_URL_PRODUCTION_OLD,
ssl: true,
Expand All @@ -42,6 +19,7 @@ async function transfer() {
ssl: true,
}).connect()


// transfer Users table
const users = (await client_old.query('SELECT * FROM "Users";')).rows
await client.query('DELETE FROM "Users";')
Expand All @@ -55,71 +33,63 @@ async function transfer() {
)
}

// transfer Guilds table
const guilds = (await client_old.query('SELECT * FROM "Guilds";')).rows
await client.query('DELETE FROM "Guilds";')
for (const guild of guilds) {
await client.query(
`INSERT INTO "Guilds" (id, name, time_created, admin_role_id, category_id) VALUES ($1, $2, $3, $4, $5);`,
[
guild.id,
guild.name,
guild.time_created,
guild.admin_role_id,
guild.category_id,
],
)
}

// transfer Rankings table
// transfer Guilds table
const guilds = (await client_old.query('SELECT * FROM "Guilds";')).rows
await client.query('DELETE FROM "Guilds";')
for (const guild of guilds) {
await client.query(
`INSERT INTO "Guilds" (id, name, time_created, category_id) VALUES ($1, $2, $3, $4);`,
[
guild.id,
guild.name,
guild.time_created,
guild.category_id,
],
)
}


// transfer Rankings table
const rankings = (await client_old.query('SELECT * FROM "Rankings";')).rows
await client.query('DELETE FROM "Rankings";')
for (const ranking of rankings) {
await client.query(
`INSERT INTO "Rankings" (id, name, time_created, players_per_team, num_teams) VALUES ($1, $2, $3, $4, $5);`,
`INSERT INTO "Rankings" (id, name, time_created, players_per_team, num_teams, elo_settings) VALUES ($1, $2, $3, $4, $5, $6);`,
[
ranking.id,
ranking.name,
ranking.time_created,
ranking.players_per_team,
ranking.num_teams,
ranking.elo_settings
],
)
}
// get highest ranking id, update Ranking_id_seq
const max_ranking_id = Math.max(...rankings.map((r) => r.id))
await client.query(`ALTER SEQUENCE "Rankings_id_seq" RESTART WITH ${max_ranking_id + 1};`)




// transfer GuildRankings table
const guild_rankings = (await client_old.query('SELECT * FROM "GuildRankings";')).rows
await client.query('DELETE FROM "GuildRankings";')
for (const guild_ranking of guild_rankings) {
await client.query(
`INSERT INTO "GuildRankings" (guild_id, ranking_id, time_created, is_admin, leaderboard_channel_id, leaderboard_message_id, queue_channel_id, queue_message_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8);`,
`INSERT INTO "GuildRankings" (guild_id, ranking_id, time_created, is_admin, leaderboard_channel_id, leaderboard_message_id) VALUES ($1, $2, $3, $4, $5, $6);`,
[
guild_ranking.guild_id,
guild_ranking.ranking_id,
guild_ranking.time_created,
guild_ranking.is_admin,
guild_ranking.leaderboard_channel_id,
guild_ranking.leaderboard_message_id,
guild_ranking.queue_channel_id,
guild_ranking.queue_message_id,
],
)
}


// merge Rankings and RankingDivisions tables
const ranking_divisions = (await client_old.query('SELECT * FROM "RankingDivisions";')).rows
const ranking_divisions_to_rankings: { [key: number]: number } = {}
for (const ranking_division of ranking_divisions) {
ranking_divisions_to_rankings[ranking_division.id] = ranking_division.ranking_id
}

console.log(ranking_divisions_to_rankings)


// transfer Players table
const players = (await client_old.query('SELECT * FROM "Players";')).rows
await client.query('DELETE FROM "Players";')
Expand All @@ -128,24 +98,27 @@ async function transfer() {
`INSERT INTO "Players" (user_id, ranking_id, time_created, name, rating, rd) VALUES ($1, $2, $3, $4, $5, $6);`,
[
player.user_id,
ranking_divisions_to_rankings[player.ranking_division_id],
player.ranking_id,
player.time_created,
player.nickname,
player.name,
player.rating,
player.rd,
],
)
}

}




async function migrate_database() {
const db = drizzle(postgres(process.env.POSTGRES_URL_PRODUCTION!, { ssl: 'require', max: 1 }))
await migrate(db, { migrationsFolder: 'migrations/migrations' })
await db.execute(matches_trigger_query)
}

// download().then(() => {
// console.log("done");
// process.exit(0);
// migrate_database().then(() => {
// console.log('done')
// process.exit(0)
// })

transfer().then(() => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
CREATE TABLE IF NOT EXISTS "AccessTokens" (
"id" text PRIMARY KEY NOT NULL,
"id" serial PRIMARY KEY NOT NULL,
"user_id" text NOT NULL,
"data" jsonb,
"purpose" text
"data" jsonb NOT NULL,
"expires_at" timestamp NOT NULL,
"time_created" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "ActiveMatches" (
"id" serial PRIMARY KEY NOT NULL,
"ranking_id" integer NOT NULL,
"time_created" timestamp DEFAULT now(),
"status" integer,
"team_users" jsonb,
"team_players" jsonb,
"team_votes" jsonb,
"channel_id" text,
"message_id" text
Expand All @@ -24,9 +25,7 @@ CREATE TABLE IF NOT EXISTS "GuildRankings" (
"leaderboard_channel_id" text,
"leaderboard_message_id" text,
"ongoing_matches_channel_id" text,
"match_results_channel_id" text,
"queue_channel_id" text,
"queue_message_id" text,
"display_settings" jsonb,
CONSTRAINT GuildRankings_guild_id_ranking_id PRIMARY KEY("guild_id","ranking_id")
);
--> statement-breakpoint
Expand All @@ -35,7 +34,8 @@ CREATE TABLE IF NOT EXISTS "Guilds" (
"name" text,
"time_created" timestamp DEFAULT now(),
"admin_role_id" text,
"category_id" text
"category_id" text,
"match_results_channel_id" text
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "MatchPlayers" (
Expand All @@ -51,18 +51,17 @@ CREATE TABLE IF NOT EXISTS "MatchPlayers" (
CREATE TABLE IF NOT EXISTS "MatchSummaryMessages" (
"match_id" integer NOT NULL,
"guild_id" text NOT NULL,
"channel_id" text,
"message_id" text,
CONSTRAINT MatchSummaryMessages_match_id_guild_id PRIMARY KEY("match_id","guild_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "Matches" (
"id" serial PRIMARY KEY NOT NULL,
"ranking_id" integer NOT NULL,
"time_created" timestamp DEFAULT now(),
"time_finished" timestamp,
"number" integer,
"team_users" jsonb,
"team_players" jsonb,
"time_started" timestamp,
"time_finished" timestamp,
"outcome" jsonb,
"metadata" jsonb
);
Expand Down Expand Up @@ -93,8 +92,9 @@ CREATE TABLE IF NOT EXISTS "Rankings" (
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "Settings" (
"id" integer PRIMARY KEY DEFAULT 0 NOT NULL,
"last_deployed" timestamp DEFAULT now()
"id" integer PRIMARY KEY DEFAULT 1 NOT NULL,
"last_deployed" timestamp DEFAULT now(),
"config" jsonb
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "TeamPlayers" (
Expand All @@ -115,9 +115,11 @@ CREATE TABLE IF NOT EXISTS "Teams" (
CREATE TABLE IF NOT EXISTS "Users" (
"id" text PRIMARY KEY NOT NULL,
"name" text,
"time_created" timestamp DEFAULT now()
"time_created" timestamp DEFAULT now(),
"linked_roles_ranking_id" integer
);
--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "match_ranking_id_index" ON "Matches" ("ranking_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "player_user_id_index" ON "Players" ("user_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "player_ranking_id_index" ON "Players" ("ranking_id");--> statement-breakpoint
DO $$ BEGIN
Expand Down
3 changes: 0 additions & 3 deletions migrations/migrations/0001_greedy_sphinx.sql

This file was deleted.

1 change: 0 additions & 1 deletion migrations/migrations/0002_nifty_onslaught.sql

This file was deleted.

13 changes: 0 additions & 13 deletions migrations/migrations/0003_spooky_bloodaxe.sql

This file was deleted.

13 changes: 0 additions & 13 deletions migrations/migrations/0004_powerful_nick_fury.sql

This file was deleted.

Loading

0 comments on commit 81c4363

Please sign in to comment.