enforce membership feature access in api and surface plans in admin
This commit is contained in:
1 parent
1f4800c055
commit
ebfd633a11
14 files changed
+573
-5
No files matched your search
@@ -5,6 +5,7 @@ import { buildAIContext } from "@/lib/ai/ai-context";
|
||||
import { buildEnhancedPrompt, buildBasicPrompt } from "@/lib/ai/prompt-builder";
|
||||
import log from "@/lib/logger";
|
||||
import { ensureUserSynced } from "@/lib/sync-user";
|
||||
import { getUserMembershipContext } from "@/lib/membership/access";
|
||||
|
||||
export async function POST(req: Request) {
|
||||
try {
|
||||
@@ -49,6 +50,41 @@ export async function POST(req: Request) {
|
||||
return NextResponse.json({ error: "User not found" }, { status: 404 });
|
||||
}
|
||||
|
||||
const { membershipType, features } = await getUserMembershipContext(userId);
|
||||
|
||||
if (features.recommendationsPerMonth === 1) {
|
||||
const currentMonth = new Date();
|
||||
const monthStart = new Date(
|
||||
currentMonth.getFullYear(),
|
||||
currentMonth.getMonth(),
|
||||
1,
|
||||
);
|
||||
const monthEnd = new Date(
|
||||
currentMonth.getFullYear(),
|
||||
currentMonth.getMonth() + 1,
|
||||
1,
|
||||
);
|
||||
|
||||
const existingRecommendations =
|
||||
await db.getRecommendationsByUserId(userId);
|
||||
const recommendationsThisMonth = existingRecommendations.filter(
|
||||
(recommendation) =>
|
||||
recommendation.generatedAt >= monthStart &&
|
||||
recommendation.generatedAt < monthEnd,
|
||||
).length;
|
||||
|
||||
if (recommendationsThisMonth >= 1) {
|
||||
return NextResponse.json(
|
||||
{
|
||||
error:
|
||||
"Basic membership includes 1 recommendation per month. Upgrade to Premium or VIP for unlimited recommendations.",
|
||||
membershipType,
|
||||
},
|
||||
{ status: 403 },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (currentUser.role !== "superAdmin") {
|
||||
if (!currentUser.gymId || targetUser.gymId !== currentUser.gymId) {
|
||||
return NextResponse.json(
|
||||
|
||||
Reference in new issue
Block a user