mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 20:38:52 +00:00
feat(server): user connected accounts migration (#6103)
This commit is contained in:
@@ -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({});
|
||||
}
|
||||
}
|
||||
13
packages/backend/server/src/data/migrations/utils/loop.ts
Normal file
13
packages/backend/server/src/data/migrations/utils/loop.ts
Normal 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++;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user