use team redis keys to resolve team gated features

This commit is contained in:
Francis Cao committed 2026-03-21 11:21:07 -07:00
1 parent 0a4dcebed7
commit cd2b303e89
7 files changed
+58 -13

No files matched your search

+21 -1
View File
@@ -1,4 +1,4 @@
import { fetchAccount } from '@/lib/load';
import { fetchAccount, fetchTeam } from '@/lib/load';
import { parseRequest } from '@/lib/request';
import { json } from '@/lib/response';
import { getAllUserTeams } from '@/queries/prisma';
@@ -20,9 +20,29 @@ export async function POST(request: Request) {
user.subscription = {
isPro: account.isPro || false,
isBusiness: account.isBusiness || false,
isNoBilling: account.isNoBilling || false,
hasSubscription: account.hasSubscription || false,
};
}
const teamsWithSubscription = await Promise.all(
teams.map(async (team: any) => {
const teamAccount = await fetchTeam(team.id);
return {
...team,
subscription: teamAccount
? {
isPro: teamAccount.isPro || false,
isBusiness: teamAccount.isBusiness || false,
isNoBilling: teamAccount.isNoBilling || false,
hasSubscription: teamAccount.hasSubscription || false,
}
: null,
};
}),
);
return json({ ...user, teams: teamsWithSubscription });
}
return json({ ...user, teams });
+7 -3
View File
@@ -4,7 +4,7 @@ import { z } from 'zod';
import { secret } from '@/lib/crypto';
import { getClientInfo, hasBlockedIp } from '@/lib/detect';
import { parseToken } from '@/lib/jwt';
import { fetchAccount } from '@/lib/load';
import { fetchAccount, fetchTeam } from '@/lib/load';
import { parseRequest } from '@/lib/request';
import { badRequest, forbidden, json, serverError } from '@/lib/response';
import { getWebsite } from '@/queries/prisma';
@@ -62,9 +62,13 @@ export async function POST(request: Request) {
}
if (process.env.CLOUD_MODE) {
const account = await fetchAccount(website.userId);
const account = website.teamId
? await fetchTeam(website.teamId)
: website.userId
? await fetchAccount(website.userId)
: null;
if (!account?.isBusiness) {
if (!account?.isBusiness && !account?.isNoBilling) {
return forbidden({ message: 'Business subscription required.' });
}
}