From 2ea34189a8356d8f35aae32c45bd22e92f890bc9 Mon Sep 17 00:00:00 2001 From: MartinBraquet Date: Sat, 7 Mar 2026 00:37:39 +0100 Subject: [PATCH] Add 2026-03-08-migrate-avatar-url.ts --- .../scripts/2026-03-08-migrate-avatar-url.ts | 38 +++++++++++++++++++ backend/scripts/run-script.ts | 2 + 2 files changed, 40 insertions(+) create mode 100644 backend/scripts/2026-03-08-migrate-avatar-url.ts diff --git a/backend/scripts/2026-03-08-migrate-avatar-url.ts b/backend/scripts/2026-03-08-migrate-avatar-url.ts new file mode 100644 index 00000000..e7a2f0b4 --- /dev/null +++ b/backend/scripts/2026-03-08-migrate-avatar-url.ts @@ -0,0 +1,38 @@ +import {runScript} from './run-script' +import {log} from 'shared/monitoring/log' +import {bulkUpdate} from 'shared/supabase/utils' +import {chunk} from 'lodash' +import {removeUndefinedProps} from 'common/util/object' + +runScript(async ({pg}) => { + const users = await pg.manyOrNone(` + select u.id, p.pinned_url + from users u + left join profiles p on p.user_id = u.id + `) + + log('Found', users.length, 'users to migrate') + + const userUpdates: {id: string; avatar_url: string}[] = [] + + for (const {id, pinned_url} of users) { + if (pinned_url) { + userUpdates.push( + removeUndefinedProps({ + id, + avatar_url: pinned_url, + }), + ) + } + } + + log(`Migrating ${userUpdates.length} users`) + + let userCount = 0 + for (const batch of chunk(userUpdates, 100)) { + await bulkUpdate(pg, 'users', ['id'], batch) + log('Updated users', (userCount += batch.length)) + } + + log('Migration complete') +}) diff --git a/backend/scripts/run-script.ts b/backend/scripts/run-script.ts index dc561014..1fb9cf29 100644 --- a/backend/scripts/run-script.ts +++ b/backend/scripts/run-script.ts @@ -19,6 +19,8 @@ export const runScript = async ( debug('[runScript] Running script...') await main({pg}) + + process.exit(0) } export async function initEnvVariables() {