feat(server): user connected accounts migration (#6103)

This commit is contained in:
liuyi
2024-03-13 09:28:52 +00:00
parent fddbb426a6
commit f2ec81b2d0
3 changed files with 62 additions and 1 deletions

View File

@@ -0,0 +1,39 @@
import { PrismaClient } from '@prisma/client';
import { loop } from './utils/loop';
export class Oauth1710319359062 {
// do the migration
static async up(db: PrismaClient) {
await loop(async (skip, take) => {
const oldRecords = await db.deprecatedNextAuthAccount.findMany({
skip,
take,
orderBy: {
providerAccountId: 'asc',
},
});
await db.connectedAccount.createMany({
data: oldRecords.map(record => ({
userId: record.userId,
provider: record.provider,
scope: record.scope,
providerAccountId: record.providerAccountId,
accessToken: record.access_token,
refreshToken: record.refresh_token,
expiresAt: record.expires_at
? new Date(record.expires_at * 1000)
: null,
})),
});
return oldRecords.length;
}, 10);
}
// revert the migration
static async down(db: PrismaClient) {
await db.connectedAccount.deleteMany({});
}
}

View File

@@ -0,0 +1,13 @@
export async function loop(
batchFn: (skip: number, take: number) => Promise<number>,
chunkSize: number = 100
) {
let turn = 0;
let last = chunkSize;
while (last === chunkSize) {
last = await batchFn(chunkSize * turn, chunkSize);
turn++;
}
}