@@ -52,7 +54,7 @@ export function PricingClient({ initialData }: PricingClientProps) {
/>
- {initialData.tiers.map((tier) => (
+ {paidTiers.map((tier) => (
}
- const paidTiers = initialData.tiers.filter(
- (tier) => tier.id !== "tier-free-plan"
- )
+ const paidTiers = initialData.tiers
if (!subscription?.planId) {
return (
-
Choose Your Plan
From 0ae0f61d1afee5125c2ac88533e75ce4b2abdf1a Mon Sep 17 00:00:00 2001
From: Ahmed0-0Kallel
Date: Tue, 3 Dec 2024 00:06:52 +0100
Subject: [PATCH 2/3] Free Tier removed from pricing and subscription pages +
Removed unecessary field from schema
---
components/app/pricing-client.tsx | 9 ++++++---
components/app/subscription-client.tsx | 4 +++-
prisma/schema.prisma | 1 -
3 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/components/app/pricing-client.tsx b/components/app/pricing-client.tsx
index 87e79f6d..d9f778ed 100644
--- a/components/app/pricing-client.tsx
+++ b/components/app/pricing-client.tsx
@@ -34,7 +34,10 @@ export function PricingClient({ initialData }: PricingClientProps) {
return
}
- const paidTiers = initialData.tiers.filter(tier => tier.id !== "tier-free")
+ const paidTiers = initialData.tiers.filter(
+ (tier) => tier.id !== "tier-free-plan"
+ )
+ console.log(paidTiers)
return (
@@ -53,7 +56,7 @@ export function PricingClient({ initialData }: PricingClientProps) {
onFrequencyChange={setFrequency}
/>
-
+
{paidTiers.map((tier) => (
}
- const paidTiers = initialData.tiers
+ const paidTiers = initialData.tiers.filter(
+ (tier) => tier.id !== "tier-free-plan"
+ )
if (!subscription?.planId) {
return (
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 9b7eba23..6ec1bd43 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -16,7 +16,6 @@ model User {
organizationSlug String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
- lemonSqueezyCustomerId String? @unique
AddressLabel AddressLabel[]
apiKeys ApiKey[]
subscriptions Subscription[]
From cc057e07c37fcb4696d23bc0e18298a7cd14eb0d Mon Sep 17 00:00:00 2001
From: Ahmed0-0Kallel
Date: Tue, 3 Dec 2024 00:35:24 +0100
Subject: [PATCH 3/3] Add subscription check to API Key generation page
- Validate subscriptions for API key generation.
- Prompt users without active subscriptions.
- Include subscription details in user retrieval.
---
app/(dashboard)/dashboard/page.tsx | 31 ++++++++++++++++++++++++++----
lib/app/user-profile.ts | 13 ++++++++++---
2 files changed, 37 insertions(+), 7 deletions(-)
diff --git a/app/(dashboard)/dashboard/page.tsx b/app/(dashboard)/dashboard/page.tsx
index a94141f2..6b11e142 100644
--- a/app/(dashboard)/dashboard/page.tsx
+++ b/app/(dashboard)/dashboard/page.tsx
@@ -1,3 +1,4 @@
+import Link from "next/link"
import { redirect } from "next/navigation"
import { getApiKeys } from "@/lib/app/api-key"
@@ -6,6 +7,7 @@ import { getSession } from "@/lib/session"
import { DashboardGenerateAPIkeysDialog } from "@/components/app/dashboard-generate-apikeys-dialog"
import { DashboardTableAPIKeys } from "@/components/app/dashboard-table-apikeys"
+import { Button } from "@/components/ui/button"
import { Card, CardContent } from "@/components/ui/card"
import { PageHeader } from "@/components/ui/page-header"
@@ -21,6 +23,13 @@ export default async function PageDashboardApiKeys() {
const apiKeys = await getApiKeys(session.user.id)
const user = await getUser(session.user.id)
+ const hasActiveSubscription = user.subscriptions?.some(
+ (sub) =>
+ sub.status === "active" &&
+ !sub.isPaused &&
+ (!sub.endsAt || new Date(sub.endsAt) > new Date()) &&
+ sub.planId != 0 // Not free Tier
+ )
return (
@@ -38,10 +47,24 @@ export default async function PageDashboardApiKeys() {
-
+ {hasActiveSubscription ? (
+
+ ) : (
+
+
Subscription Required
+
+ You need an active subscription to generate API keys.
+
+
+
+ )}
diff --git a/lib/app/user-profile.ts b/lib/app/user-profile.ts
index 85c3b833..34a5a68d 100644
--- a/lib/app/user-profile.ts
+++ b/lib/app/user-profile.ts
@@ -1,11 +1,12 @@
"use server"
import { cookies } from "next/headers"
-import { User } from "@prisma/client"
+import { Subscription, User } from "@prisma/client"
import { getIronSession } from "iron-session"
import { prisma } from "@/lib/prisma"
import { SERVER_SESSION_SETTINGS, SessionData } from "@/lib/session"
+import { getCurrentSubscription } from "./actions"
export async function Logout() {
const session = await getIronSession(
@@ -27,7 +28,7 @@ export async function updateUser(
})
}
-export async function getUser(userId: string): Promise {
+export async function getUser(userId: string): Promise {
const user = await prisma.user.findUnique({
where: {
id: userId,
@@ -36,8 +37,14 @@ export async function getUser(userId: string): Promise {
if (!user) {
throw new Error("User not found")
}
- return user
+
+ const subscription = await getCurrentSubscription(userId)
+ return {
+ ...user,
+ subscriptions: subscription ? [subscription] : []
+ }
}
+
export async function createUser(data: Omit): Promise {
return await prisma.user.create({
data,