mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-02 09:59:55 +08:00
37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
|
|
|
import { QuotaType } from '../../core/quota/types';
|
|
export class OldUserFeature1702620653283 {
|
|
// do the migration
|
|
static async up(db: PrismaClient) {
|
|
await db.$transaction(async tx => {
|
|
const latestFreePlan = await tx.feature.findFirstOrThrow({
|
|
where: { feature: QuotaType.FreePlanV1 },
|
|
orderBy: { version: 'desc' },
|
|
select: { id: true },
|
|
});
|
|
|
|
// find all users that don't have any features
|
|
const userIds = await db.user.findMany({
|
|
where: { NOT: { features: { some: { NOT: { id: { gt: 0 } } } } } },
|
|
select: { id: true },
|
|
});
|
|
|
|
await tx.userFeature.createMany({
|
|
data: userIds.map(({ id: userId }) => ({
|
|
userId,
|
|
featureId: latestFreePlan.id,
|
|
reason: 'old user feature migration',
|
|
activated: true,
|
|
})),
|
|
});
|
|
});
|
|
}
|
|
|
|
// revert the migration
|
|
// WARN: this will drop all user features
|
|
static async down(db: PrismaClient) {
|
|
await db.userFeature.deleteMany({});
|
|
}
|
|
}
|