Files
hub-monorepo/packages/hub-nodejs/examples/replicate-data-postgres/migrations/001_initial_migration.ts
Varun Srinivasan 4c38067c15 chore: switch from eslint/prettier to rome (#1074)
* chore: add rome config files

* chore: add rome into configs and ci

* chore: remove eslint annotations

* chore: update annotations for rome ignores

* chore: remove prettier
2023-07-04 19:09:15 -07:00

206 lines
9.7 KiB
TypeScript

import { Kysely, sql } from "kysely";
// rome-ignore lint/suspicious/noExplicitAny: legacy code, avoid using ignore for new code
export const up = async (db: Kysely<any>) => {
await db.schema
.createTable("hubSubscriptions")
.addColumn("host", "text", (col) => col.notNull().primaryKey())
.addColumn("last_event_id", "bigint")
.execute();
await db.schema
.createTable("messages")
.addColumn("id", "bigint", (col) => col.generatedAlwaysAsIdentity().primaryKey())
.addColumn("createdAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("updatedAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("deletedAt", "timestamp")
.addColumn("prunedAt", "timestamp")
.addColumn("revokedAt", "timestamp")
.addColumn("timestamp", "timestamp", (col) => col.notNull())
.addColumn("messageType", sql`smallint`, (col) => col.notNull())
.addColumn("fid", "bigint", (col) => col.notNull())
.addColumn("hash", sql`bytea`, (col) => col.notNull())
.addColumn("hashScheme", sql`smallint`, (col) => col.notNull())
.addColumn("signature", sql`bytea`, (col) => col.notNull())
.addColumn("signatureScheme", sql`smallint`, (col) => col.notNull())
.addColumn("signer", sql`bytea`, (col) => col.notNull())
.addColumn("raw", sql`bytea`, (col) => col.notNull())
.addUniqueConstraint("messages_hash_unique", ["hash"])
.execute();
await db.schema.createIndex("messages_timestamp_index").on("messages").columns(["timestamp"]).execute();
await db.schema
.createTable("casts")
.addColumn("id", "bigint", (col) => col.generatedAlwaysAsIdentity().primaryKey())
.addColumn("createdAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("updatedAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("deletedAt", "timestamp")
.addColumn("timestamp", "timestamp", (col) => col.notNull())
.addColumn("fid", "bigint", (col) => col.notNull())
.addColumn("hash", sql`bytea`, (col) => col.notNull())
.addColumn("parentHash", sql`bytea`)
.addColumn("parentFid", "bigint")
.addColumn("parentUrl", "text")
.addColumn("text", "text", (col) => col.notNull())
.addColumn("embeds", sql`text[]`, (col) => col.notNull().defaultTo(sql`'{}'`))
.addColumn("mentions", sql`bigint[]`, (col) => col.notNull().defaultTo(sql`'{}'`))
.addColumn("mentionsPositions", sql`smallint[]`, (col) => col.notNull().defaultTo(sql`'{}'`))
.addUniqueConstraint("casts_hash_unique", ["hash"])
.addForeignKeyConstraint("casts_hash_foreign", ["hash"], "messages", ["hash"])
.execute();
await db.schema.createIndex("casts_fid_timestamp_index").on("casts").columns(["fid", "timestamp"]).execute();
await db.schema.createIndex("casts_timestamp_index").on("casts").columns(["timestamp"]).execute();
await db.schema
.createIndex("casts_parent_hash_parent_fid_index")
.on("casts")
.columns(["parentHash", "parentFid"])
.where("parentHash", "is not", null)
.where("parentFid", "is not", null)
.execute();
await db.schema
.createIndex("casts_parent_url_index")
.on("casts")
.columns(["parentUrl"])
.where("parentUrl", "is not", null)
.execute();
await db.schema
.createTable("reactions")
.addColumn("id", "bigint", (col) => col.generatedAlwaysAsIdentity().primaryKey())
.addColumn("createdAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("updatedAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("deletedAt", "timestamp")
.addColumn("timestamp", "timestamp", (col) => col.notNull())
.addColumn("reactionType", sql`smallint`, (col) => col.notNull())
.addColumn("fid", "bigint", (col) => col.notNull())
.addColumn("hash", sql`bytea`, (col) => col.notNull())
.addColumn("targetHash", sql`bytea`)
.addColumn("targetFid", "bigint")
.addColumn("targetUrl", "text")
.addUniqueConstraint("reactions_hash_unique", ["hash"])
.addForeignKeyConstraint("reactions_hash_foreign", ["hash"], "messages", ["hash"])
.execute();
await db.schema.createIndex("reactions_fid_timestamp_index").on("reactions").columns(["fid", "timestamp"]).execute();
await db.schema
.createIndex("reactions_target_hash_target_fid_index")
.on("reactions")
.columns(["targetHash", "targetFid"])
.where("targetHash", "is not", null)
.where("targetFid", "is not", null)
.execute();
await db.schema
.createIndex("reactions_target_url_index")
.on("reactions")
.columns(["targetUrl"])
.where("targetUrl", "is not", null)
.execute();
await db.schema
.createTable("signers")
.addColumn("id", "bigint", (col) => col.generatedAlwaysAsIdentity().primaryKey())
.addColumn("createdAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("updatedAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("deletedAt", "timestamp")
.addColumn("timestamp", "timestamp", (col) => col.notNull())
.addColumn("fid", "bigint", (col) => col.notNull())
.addColumn("hash", sql`bytea`, (col) => col.notNull())
.addColumn("custodyAddress", sql`bytea`, (col) => col.notNull())
.addColumn("signer", sql`bytea`, (col) => col.notNull())
.addColumn("name", "text")
.addUniqueConstraint("signers_hash_unique", ["hash"])
.addForeignKeyConstraint("signers_hash_foreign", ["hash"], "messages", ["hash"])
.execute();
await db.schema.createIndex("signers_fid_timestamp_index").on("signers").columns(["fid", "timestamp"]).execute();
await db.schema
.createTable("verifications")
.addColumn("id", "bigint", (col) => col.generatedAlwaysAsIdentity().primaryKey())
.addColumn("createdAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("updatedAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("deletedAt", "timestamp")
.addColumn("timestamp", "timestamp", (col) => col.notNull())
.addColumn("fid", "bigint", (col) => col.notNull())
.addColumn("hash", sql`bytea`, (col) => col.notNull())
.addColumn("claim", "jsonb", (col) => col.notNull())
.addUniqueConstraint("verifications_hash_unique", ["hash"])
.addForeignKeyConstraint("verifications_hash_foreign", ["hash"], "messages", ["hash"])
.execute();
await db.schema
.createIndex("verifications_claim_address_index")
.on("verifications")
.expression(sql`(claim ->> 'address'::text)`)
.execute();
await db.schema
.createIndex("verifications_fid_timestamp_index")
.on("verifications")
.columns(["fid", "timestamp"])
.execute();
await db.schema
.createTable("userData")
.addColumn("id", "bigint", (col) => col.generatedAlwaysAsIdentity().primaryKey())
.addColumn("createdAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("updatedAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("deletedAt", "timestamp")
.addColumn("timestamp", "timestamp", (col) => col.notNull())
.addColumn("fid", "bigint", (col) => col.notNull())
.addColumn("hash", sql`bytea`, (col) => col.notNull())
.addColumn("type", sql`smallint`, (col) => col.notNull())
.addColumn("value", "text", (col) => col.notNull())
.addUniqueConstraint("user_data_hash_unique", ["hash"])
.addUniqueConstraint("user_data_fid_type_unique", ["fid", "type"])
.addForeignKeyConstraint("user_data_hash_foreign", ["hash"], "messages", ["hash"])
.execute();
await db.schema.createIndex("user_data_fid_index").on("user_data").columns(["fid"]).execute();
await db.schema
.createTable("fids")
.addColumn("fid", "bigint", (col) => col.primaryKey())
.addColumn("createdAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("updatedAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("custodyAddress", sql`bytea`, (col) => col.notNull())
.execute();
await db.schema
.createTable("fnames")
.addColumn("fname", "text", (col) => col.primaryKey())
.addColumn("createdAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("updatedAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("custodyAddress", sql`bytea`, (col) => col.notNull())
.addColumn("expiresAt", "timestamp", (col) => col.notNull())
.execute();
await db.schema
.createTable("links")
.addColumn("id", "bigint", (col) => col.generatedAlwaysAsIdentity().primaryKey())
.addColumn("fid", "bigint")
.addColumn("targetFid", "bigint")
.addColumn("timestamp", "timestamp", (col) => col.notNull())
.addColumn("createdAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("updatedAt", "timestamp", (col) => col.notNull().defaultTo(sql`current_timestamp`))
.addColumn("deletedAt", "timestamp")
.addColumn("type", "text")
.addColumn("displayTimestamp", "timestamp")
.execute();
};
// rome-ignore lint/suspicious/noExplicitAny: legacy code, avoid using ignore for new code
export const down = async (db: Kysely<any>) => {
await db.schema.dropTable("links").ifExists().execute();
await db.schema.dropTable("fnames").ifExists().execute();
await db.schema.dropTable("fids").ifExists().execute();
await db.schema.dropTable("casts").ifExists().execute();
await db.schema.dropTable("reactions").ifExists().execute();
await db.schema.dropTable("signers").ifExists().execute();
await db.schema.dropTable("verifications").ifExists().execute();
await db.schema.dropTable("userData").ifExists().execute();
await db.schema.dropTable("messages").ifExists().execute();
};