mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-09-22 03:33:06 +08:00
feat: add quota for old users (#5318)
This commit is contained in:
@@ -0,0 +1,37 @@
|
|||||||
|
import { QuotaType } from '../../modules/quota/types';
|
||||||
|
import { PrismaService } from '../../prisma';
|
||||||
|
|
||||||
|
export class OldUserFeature1702620653283 {
|
||||||
|
// do the migration
|
||||||
|
static async up(db: PrismaService) {
|
||||||
|
await db.$transaction(async tx => {
|
||||||
|
const latestFreePlan = await tx.features.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 },
|
||||||
|
});
|
||||||
|
console.log(`migrating ${userIds.join('|')} users`);
|
||||||
|
|
||||||
|
await tx.userFeatures.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: PrismaService) {
|
||||||
|
await db.userFeatures.deleteMany({});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -83,9 +83,9 @@ export class QuotaService {
|
|||||||
expiredAt?: Date
|
expiredAt?: Date
|
||||||
) {
|
) {
|
||||||
await this.prisma.$transaction(async tx => {
|
await this.prisma.$transaction(async tx => {
|
||||||
const latestFreePlan = await tx.features.aggregate({
|
const latestPlanVersion = await tx.features.aggregate({
|
||||||
where: {
|
where: {
|
||||||
feature: QuotaType.FreePlanV1,
|
feature: quota,
|
||||||
},
|
},
|
||||||
_max: {
|
_max: {
|
||||||
version: true,
|
version: true,
|
||||||
@@ -117,7 +117,7 @@ export class QuotaService {
|
|||||||
connect: {
|
connect: {
|
||||||
feature_version: {
|
feature_version: {
|
||||||
feature: quota,
|
feature: quota,
|
||||||
version: latestFreePlan._max.version || 1,
|
version: latestPlanVersion._max.version || 1,
|
||||||
},
|
},
|
||||||
type: FeatureKind.Quota,
|
type: FeatureKind.Quota,
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user