Backfilled the members last_seen_at column

refs https://github.com/TryGhost/Team/issues/1305

- Skipped sqlite3 compatibility due to the lack of join support in update
- Uses a raw migration to improve performance
This commit is contained in:
Thibaut Patel 2022-02-21 18:04:37 +01:00 committed by Thibaut Patel
parent 00195b5bc4
commit e7751fa279

View File

@ -0,0 +1,31 @@
const logging = require('@tryghost/logging');
const {createTransactionalMigration} = require('../../utils');
module.exports = createTransactionalMigration(
async function up(knex) {
if (knex.client.config.client === 'sqlite3') {
logging.warn('Skipping migration for SQLite3');
return;
}
logging.info('Backfilling the members.last_seen_at column from members_login_events.');
await knex.raw(`
UPDATE members
INNER JOIN (SELECT member_id as id, MAX(created_at) as last_seen_at
FROM members_login_events
GROUP BY member_id) as logins ON logins.id = members.id
SET
members.last_seen_at = logins.last_seen_at
WHERE
members.last_seen_at IS NULL
OR members.last_seen_at < logins.last_seen_at
`);
},
async function down(knex) {
if (knex.client.config.client === 'sqlite3') {
logging.warn('Skipping migration for SQLite3');
return;
}
logging.info('Rolling back the backfilling of the members.last_seen_at column from members_login_events.');
await knex('members').update({last_seen_at: null});
}
);