From a487f210599afbaffc3b918dcc3d8c6ebd5660dd Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Mon, 4 Nov 2024 02:37:45 +0100 Subject: [PATCH] Improved socials table. --- migrations/20241103060644_socials.js | 29 +++++++++++++++++++--------- src/actors.js | 2 +- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/migrations/20241103060644_socials.js b/migrations/20241103060644_socials.js index c5fc92b8..11eeafb2 100644 --- a/migrations/20241103060644_socials.js +++ b/migrations/20241103060644_socials.js @@ -3,32 +3,43 @@ exports.up = async (knex) => { table.dropUnique(['url', 'actor_id', 'profile_id']); table.dropColumn('profile_id'); - table.string('username'); + table.string('handle'); - table.unique(['actor_id', 'platform', 'username']); - table.unique(['actor_id', 'url']); + table.boolean('is_broken') + .notNullable() + .defaultTo(false); + table.datetime('pinged_at'); table.datetime('verified_at'); + + table.unique(['actor_id', 'platform', 'handle']); + table.unique(['actor_id', 'url']); }); - await knex.raw('ALTER TABLE actors_social ADD CONSTRAINT actors_url_or_username CHECK (num_nulls(username, url) = 1);'); - await knex.raw('ALTER TABLE actors_social ADD CONSTRAINT actors_username_and_platform CHECK (num_nulls(platform, username) = 2 or num_nulls(platform, username) = 0);'); + await knex.raw('ALTER TABLE actors_social ADD CONSTRAINT socials_url_or_handle CHECK (num_nulls(handle, url) = 1);'); + await knex.raw('ALTER TABLE actors_social ADD CONSTRAINT socials_handle_and_platform CHECK (num_nulls(platform, handle) = 2 or num_nulls(platform, handle) = 0);'); + + await knex.schema.renameTable('actors_social', 'actors_socials'); }; exports.down = async (knex) => { - await knex.raw('ALTER TABLE actors_social DROP CONSTRAINT actors_url_or_username;'); - await knex.raw('ALTER TABLE actors_social DROP CONSTRAINT actors_username_and_platform;'); + await knex.raw('ALTER TABLE actors_socials DROP CONSTRAINT socials_url_or_handle;'); + await knex.raw('ALTER TABLE actors_socials DROP CONSTRAINT socials_handle_and_platform;'); + + await knex.schema.renameTable('actors_socials', 'actors_social'); await knex.schema.alterTable('actors_social', (table) => { - table.dropUnique(['actor_id', 'platform', 'username']); + table.dropUnique(['actor_id', 'platform', 'handle']); table.dropUnique(['actor_id', 'url']); table.integer('profile_id') .references('id') .inTable('actors_profiles'); - table.dropColumn('username'); + table.dropColumn('handle'); table.dropColumn('verified_at'); + table.dropColumn('pinged_at'); + table.dropColumn('is_broken'); table.unique(['url', 'actor_id', 'profile_id']); }); diff --git a/src/actors.js b/src/actors.js index 2e5580e6..808f0831 100755 --- a/src/actors.js +++ b/src/actors.js @@ -709,7 +709,7 @@ async function associateSocials(profiles) { return; } - await knex('actors_social') + await knex('actors_socials') .insert(profile.social.map((url) => ({ url, platform: new URL(url).hostname.match(/([\w-]+)?\.(\w+)$/)?.[1],