From f6421d6be1aa70e6d18d45dd849964e9f9a01b04 Mon Sep 17 00:00:00 2001 From: cade Date: Tue, 30 Jul 2024 20:57:01 -0700 Subject: [PATCH] add pro plan --- .github/workflows/preview.yml | 6 ++- .github/workflows/production.yml | 6 ++- README.md | 46 +++++++++++----- app/(pages)/(with-nav)/layout.tsx | 6 ++- app/_components/account-menu.tsx | 49 +++++++++++++++-- app/_components/avatar.tsx | 2 - app/_components/button.tsx | 5 +- app/_mutations/create-customer-checkout.ts | 30 +++++++++++ app/_queries/get-customer-billing-portal.ts | 18 +++++++ app/_queries/get-customer.ts | 11 ++++ .../create-server-supabase-client.ts | 27 +++++----- app/_utilities/format-image-url.ts | 7 +-- app/_utilities/generate-image-loader.ts | 21 -------- app/api/lemon-squeezy/webhook/route.ts | 50 ++++++++++++++++++ bun.lockb | Bin 363655 -> 365984 bytes middleware.ts | 25 ++++----- package.json | 45 ++++++++-------- .../20240731040221_add-customers-table.sql | 20 +++++++ test | 0 19 files changed, 270 insertions(+), 104 deletions(-) create mode 100644 app/_mutations/create-customer-checkout.ts create mode 100644 app/_queries/get-customer-billing-portal.ts create mode 100644 app/_queries/get-customer.ts delete mode 100644 app/_utilities/generate-image-loader.ts create mode 100644 app/api/lemon-squeezy/webhook/route.ts create mode 100644 supabase/migrations/20240731040221_add-customers-table.sql delete mode 100644 test diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 52b42515..c0fc5cd5 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -4,12 +4,16 @@ on: branches-ignore: - main env: + LEMON_SQUEEZY_API_KEY: ${{ secrets.LEMON_SQUEEZY_API_KEY }} + LEMON_SQUEEZY_STORE_ID: ${{ secrets.LEMON_SQUEEZY_STORE_ID }} + LEMON_SQUEEZY_VARIANT_ID: ${{ secrets.LEMON_SQUEEZY_VARIANT_ID }} + LEMON_SQUEEZY_WEBHOOK_SECRET: ${{ secrets.LEMON_SQUEEZY_WEBHOOK_SECRET }} NEXT_PUBLIC_SUPABASE_ANON_KEY: ${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }} - NEXT_PUBLIC_SUPABASE_PRO: ${{ secrets.NEXT_PUBLIC_SUPABASE_PRO }} NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.NEXT_PUBLIC_SUPABASE_URL }} SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} SUPABASE_DB_PASSWORD_INLINE: ${{ secrets.SUPABASE_DB_PASSWORD }} SUPABASE_PROJECT_ID: ${{ secrets.SUPABASE_PROJECT_ID }} + SUPABASE_SERVICE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }} VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index 92458082..40dfc4a8 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -4,12 +4,16 @@ on: branches: - main env: + LEMON_SQUEEZY_API_KEY: ${{ secrets.LEMON_SQUEEZY_API_KEY }} + LEMON_SQUEEZY_VARIANT_ID: ${{ secrets.LEMON_SQUEEZY_VARIANT_ID }} + LEMON_SQUEEZY_STORE_ID: ${{ secrets.LEMON_SQUEEZY_STORE_ID }} + LEMON_SQUEEZY_WEBHOOK_SECRET: ${{ secrets.LEMON_SQUEEZY_WEBHOOK_SECRET }} NEXT_PUBLIC_SUPABASE_ANON_KEY: ${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }} - NEXT_PUBLIC_SUPABASE_PRO: ${{ secrets.NEXT_PUBLIC_SUPABASE_PRO }} NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.NEXT_PUBLIC_SUPABASE_URL }} SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} SUPABASE_DB_PASSWORD_INLINE: ${{ secrets.SUPABASE_DB_PASSWORD }} SUPABASE_PROJECT_ID: ${{ secrets.SUPABASE_PROJECT_ID }} + SUPABASE_SERVICE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }} VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} diff --git a/README.md b/README.md index 61a9522f..329dfbc6 100644 --- a/README.md +++ b/README.md @@ -16,12 +16,8 @@ bun db:start # outputs supabase url & key Add the following to your `.env` file: ```dotenv -# required NEXT_PUBLIC_SUPABASE_ANON_KEY= NEXT_PUBLIC_SUPABASE_URL= - -# optional -NEXT_PUBLIC_SUPABASE_PRO=1 ``` Generate types and start the dev server: @@ -40,16 +36,40 @@ bun db:diff -- -f migration-description ## Production Notes -- Update next.config.js remotePatterns +Vercel common secrets: + +- LEMON_SQUEEZY_STORE_ID + +Vercel environment secrets: + +- LEMON_SQUEEZY_API_KEY +- LEMON_SQUEEZY_VARIANT_ID +- LEMON_SQUEEZY_WEBHOOK_SECRET +- SUPABASE_SERVICE_KEY + +GitHub repo secrets: + +- SUPABASE_ACCESS_TOKEN +- VERCEL_ORG_ID +- VERCEL_PROJECT_ID +- VERCEL_TOKEN + +GitHub environment secrets: + +- NEXT_PUBLIC_SUPABASE_ANON_KEY +- NEXT_PUBLIC_SUPABASE_URL +- SUPABASE_DB_PASSWORD +- SUPABASE_PROJECT_ID + +Supabase settings: + +- Add custom SMTP server - Update auth providers - Update email templates - Update url config -- Add custom SMTP server -- Enable realtime (notifications) +- Enable realtime (notifications table) - Remove GraphQL api -- Github environment secrets: - - NEXT_PUBLIC_SUPABASE_ANON_KEY - - NEXT_PUBLIC_SUPABASE_PRO - - NEXT_PUBLIC_SUPABASE_URL - - SUPABASE_DB_PASSWORD - - SUPABASE_PROJECT_ID + +Other settings: + +- Update next.config.js remotePatterns diff --git a/app/(pages)/(with-nav)/layout.tsx b/app/(pages)/(with-nav)/layout.tsx index 5f87b231..1cd558b4 100644 --- a/app/(pages)/(with-nav)/layout.tsx +++ b/app/(pages)/(with-nav)/layout.tsx @@ -4,6 +4,7 @@ import IconButton from '@/_components/icon-button'; import Subscriptions from '@/_components/subscriptions'; import countNotifications from '@/_queries/count-notifications'; import getCurrentUser from '@/_queries/get-current-user'; +import getCustomer from '@/_queries/get-customer'; import BellIcon from '@heroicons/react/24/outline/BellIcon'; import { ReactNode } from 'react'; @@ -12,9 +13,10 @@ interface LayoutProps { } const Layout = async ({ children }: LayoutProps) => { - const [{ count }, user] = await Promise.all([ + const [{ count }, user, { data: customer }] = await Promise.all([ countNotifications(), getCurrentUser(), + getCustomer(), ]); if (!user) return null; @@ -63,7 +65,7 @@ const Layout = async ({ children }: LayoutProps) => { } scroll={false} /> - + )} diff --git a/app/_components/account-menu.tsx b/app/_components/account-menu.tsx index e66d3f2f..722c133c 100644 --- a/app/_components/account-menu.tsx +++ b/app/_components/account-menu.tsx @@ -2,19 +2,30 @@ import Avatar from '@/_components/avatar'; import DropdownMenu from '@/_components/dropdown-menu'; +import createCustomerCheckout from '@/_mutations/create-customer-checkout'; import signOut from '@/_mutations/sign-out'; +import { GetCustomerData } from '@/_queries/get-customer'; +import getCustomerBillingPortal from '@/_queries/get-customer-billing-portal'; import ArrowLeftStartOnRectangleIcon from '@heroicons/react/24/outline/ArrowLeftStartOnRectangleIcon'; +import ArrowUpCircleIcon from '@heroicons/react/24/outline/ArrowUpCircleIcon'; import Bars3Icon from '@heroicons/react/24/outline/Bars3Icon'; import Cog6ToothIcon from '@heroicons/react/24/outline/Cog6ToothIcon'; +import CreditCardIcon from '@heroicons/react/24/outline/CreditCardIcon'; import { User } from '@supabase/supabase-js'; -import { useTransition } from 'react'; +import { useState, useTransition } from 'react'; interface AccountMenuProps { + customer: GetCustomerData; user: User | null; } -const AccountMenu = ({ user }: AccountMenuProps) => { - const [isTransitioning, startTransition] = useTransition(); +const AccountMenu = ({ customer, user }: AccountMenuProps) => { + const [isSignOutTransitioning, startSignOutTransition] = useTransition(); + + const [isBillingRedirectLoading, setIsBillingRedirectLoading] = + useState(false); + + const isSubscribed = customer?.subscription_status === 'active'; return ( { Account settings { + e.preventDefault(); + setIsBillingRedirectLoading(true); + + const { url } = await (isSubscribed + ? getCustomerBillingPortal() + : createCustomerCheckout()); + + if (url) location.href = url; + else setIsBillingRedirectLoading(false); + }} + > + {isSubscribed ? ( + <> + + Manage subscription + + ) : ( + <> + + Upgrade to pro + + )} + + + { e.preventDefault(); - startTransition(signOut); + startSignOutTransition(signOut); }} > diff --git a/app/_components/avatar.tsx b/app/_components/avatar.tsx index 820e9fa2..372eb494 100644 --- a/app/_components/avatar.tsx +++ b/app/_components/avatar.tsx @@ -1,7 +1,6 @@ 'use client'; import formatImageUrl from '@/_utilities/format-image-url'; -import generateImageLoader from '@/_utilities/generate-image-loader'; import Image from 'next/image'; import { twMerge } from 'tailwind-merge'; @@ -34,7 +33,6 @@ const Avatar = ({ className, file, id = '', size = 'md' }: AvatarProps) => { alt="" className="object-cover object-center" fill - loader={generateImageLoader({ aspectRatio: '1:1' })} sizes={sizes[size].imgSizes} src={ src ?? diff --git a/app/_components/button.tsx b/app/_components/button.tsx index 557afe97..da567d55 100644 --- a/app/_components/button.tsx +++ b/app/_components/button.tsx @@ -107,10 +107,7 @@ const Button = forwardRef( {loading || (type === 'submit' && pending) ? ( <> {variant !== 'link' && ( - + )} {loadingText ?? children} diff --git a/app/_mutations/create-customer-checkout.ts b/app/_mutations/create-customer-checkout.ts new file mode 100644 index 00000000..c2267144 --- /dev/null +++ b/app/_mutations/create-customer-checkout.ts @@ -0,0 +1,30 @@ +'use server'; + +import getCurrentUser from '@/_queries/get-current-user'; + +import { + createCheckout, + lemonSqueezySetup, +} from '@lemonsqueezy/lemonsqueezy.js'; + +const createCustomerCheckout = async () => { + const user = await getCurrentUser(); + if (!user) return { url: null }; + lemonSqueezySetup({ apiKey: process.env.LEMON_SQUEEZY_API_KEY! }); + + const res = await createCheckout( + process.env.LEMON_SQUEEZY_STORE_ID!, + process.env.LEMON_SQUEEZY_VARIANT_ID!, + { + checkoutData: { + custom: { user_id: user.id }, + email: user.email, + name: `${user.user_metadata.first_name} ${user.user_metadata.last_name}`, + }, + }, + ); + + return { url: res.data?.data.attributes.url ?? null }; +}; + +export default createCustomerCheckout; diff --git a/app/_queries/get-customer-billing-portal.ts b/app/_queries/get-customer-billing-portal.ts new file mode 100644 index 00000000..469bff6f --- /dev/null +++ b/app/_queries/get-customer-billing-portal.ts @@ -0,0 +1,18 @@ +'use server'; + +import getCustomer from '@/_queries/get-customer'; + +import { + getCustomer as lemonSqueezyGetCustomer, + lemonSqueezySetup, +} from '@lemonsqueezy/lemonsqueezy.js'; + +const getCustomerBillingPortal = async () => { + const { data: customer } = await getCustomer(); + if (!customer) return { url: null }; + lemonSqueezySetup({ apiKey: process.env.LEMON_SQUEEZY_API_KEY! }); + const res = await lemonSqueezyGetCustomer(customer.customer_id); + return { url: res.data?.data.attributes.urls.customer_portal ?? null }; +}; + +export default getCustomerBillingPortal; diff --git a/app/_queries/get-customer.ts b/app/_queries/get-customer.ts new file mode 100644 index 00000000..ab419138 --- /dev/null +++ b/app/_queries/get-customer.ts @@ -0,0 +1,11 @@ +import createServerSupabaseClient from '@/_utilities/create-server-supabase-client'; + +const getCustomer = () => + createServerSupabaseClient() + .from('customers') + .select('customer_id, subscription_status') + .single(); + +export type GetCustomerData = Awaited>['data']; + +export default getCustomer; diff --git a/app/_utilities/create-server-supabase-client.ts b/app/_utilities/create-server-supabase-client.ts index a58fff0d..75f813ea 100644 --- a/app/_utilities/create-server-supabase-client.ts +++ b/app/_utilities/create-server-supabase-client.ts @@ -1,29 +1,26 @@ import { Database } from '@/_types/database'; -import { CookieOptions, createServerClient } from '@supabase/ssr'; +import { createServerClient } from '@supabase/ssr'; import { cookies } from 'next/headers'; -const createServerSupabaseClient = () => { +const createServerSupabaseClient = ({ + apiKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, +} = {}) => { const cookieStore = cookies(); return createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, + apiKey, { cookies: { - get(name: string) { - return cookieStore.get(name)?.value; + getAll() { + return cookieStore.getAll(); }, - remove(name: string, options: CookieOptions) { + setAll(cookiesToSet) { try { - cookieStore.set({ name, value: '', ...options }); - } catch (e) { - // noop - } - }, - set(name: string, value: string, options: CookieOptions) { - try { - cookieStore.set({ name, value, ...options }); - } catch (e) { + cookiesToSet.forEach(({ name, value, options }) => + cookieStore.set(name, value, options), + ); + } catch { // noop } }, diff --git a/app/_utilities/format-image-url.ts b/app/_utilities/format-image-url.ts index 45e74ef4..8d394b2f 100644 --- a/app/_utilities/format-image-url.ts +++ b/app/_utilities/format-image-url.ts @@ -5,12 +5,7 @@ const formatImageUrl = (file?: string | File | null) => { if (typeof file === 'string') { if (file.startsWith('http')) return file; - - const pathPart = process.env.NEXT_PUBLIC_SUPABASE_PRO - ? 'render/image' - : 'object'; - - return `${process.env.NEXT_PUBLIC_SUPABASE_URL}/storage/v1/${pathPart}/public/${file}`; + return `${process.env.NEXT_PUBLIC_SUPABASE_URL}/storage/v1/object/public/${file}`; } if (file instanceof File) { diff --git a/app/_utilities/generate-image-loader.ts b/app/_utilities/generate-image-loader.ts deleted file mode 100644 index 6662bfc3..00000000 --- a/app/_utilities/generate-image-loader.ts +++ /dev/null @@ -1,21 +0,0 @@ -const generateImageLoader = ({ aspectRatio }: { aspectRatio?: string } = {}) => - process.env.NEXT_PUBLIC_SUPABASE_PRO - ? ({ - quality = 100, - src, - width, - }: { - quality?: number; - src: string; - width: number; - }) => { - const divider = src.includes('?') ? '&' : '?'; - const url = `${src}${divider}width=${width}&quality=${quality}`; - if (!aspectRatio) return url; - const [w, h] = aspectRatio.split(':').map(Number); - const height = Math.round((width * h) / w); - return `${url}&height=${height}`; - } - : undefined; - -export default generateImageLoader; diff --git a/app/api/lemon-squeezy/webhook/route.ts b/app/api/lemon-squeezy/webhook/route.ts new file mode 100644 index 00000000..6bcd44eb --- /dev/null +++ b/app/api/lemon-squeezy/webhook/route.ts @@ -0,0 +1,50 @@ +import createServerSupabaseClient from '@/_utilities/create-server-supabase-client'; +import crypto from 'crypto'; + +const POST = async (request: Request) => { + const body = await request.text(); + const secret = process.env.LEMON_SQUEEZY_WEBHOOK_SECRET!; + const hmac = crypto.createHmac('sha256', secret); + const digest = Buffer.from(hmac.update(body).digest('hex'), 'utf8'); + const rawSignature = request.headers.get('X-Signature') ?? ''; + const signature = Buffer.from(rawSignature, 'utf8'); + + if (!crypto.timingSafeEqual(digest, signature)) { + return new Response('Invalid signature', { status: 400 }); + } + + let customerId, eventName, subscriptionStatus, userId; + + try { + const json = JSON.parse(body); + customerId = json.data.attributes.customer_id; + eventName = json.meta.event_name; + subscriptionStatus = json.data.attributes.status; + userId = json.meta.custom_data.user_id; + } catch (e) { + return new Response('Invalid payload', { status: 400 }); + } + + switch (eventName) { + case 'subscription_created': + case 'subscription_expired': { + await createServerSupabaseClient({ + apiKey: process.env.SUPABASE_SERVICE_KEY!, + }) + .from('customers') + .upsert({ + customer_id: customerId, + id: userId, + subscription_status: subscriptionStatus, + }); + + return new Response('OK', { status: 200 }); + } + + default: { + return new Response('Invalid payload', { status: 400 }); + } + } +}; + +export { POST }; diff --git a/bun.lockb b/bun.lockb index 6302efba7a42b131fbc920a961357efc06cfcf36..107d1d8b31389c708d2fd8c8f56642623518d2bf 100755 GIT binary patch delta 67206 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

cu=9#e9D%Wr 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 diff --git a/middleware.ts b/middleware.ts index 3654f78d..dbe145d5 100644 --- a/middleware.ts +++ b/middleware.ts @@ -1,4 +1,4 @@ -import { CookieOptions, createServerClient } from '@supabase/ssr'; +import { createServerClient } from '@supabase/ssr'; import { NextRequest, NextResponse } from 'next/server'; export const config = { @@ -15,18 +15,19 @@ export const middleware = async (req: NextRequest) => { process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, { cookies: { - get(name: string) { - return req.cookies.get(name)?.value; + getAll() { + return req.cookies.getAll(); }, - remove(name: string, options: CookieOptions) { - req.cookies.set({ name, value: '', ...options }); - res = NextResponse.next({ request: { headers: req.headers } }); - res.cookies.set({ name, value: '', ...options }); - }, - set(name: string, value: string, options: CookieOptions) { - req.cookies.set({ name, value, ...options }); - res = NextResponse.next({ request: { headers: req.headers } }); - res.cookies.set({ name, value, ...options }); + setAll(cookiesToSet) { + cookiesToSet.forEach(({ name, value }) => + req.cookies.set(name, value), + ); + + res = NextResponse.next({ request: req }); + + cookiesToSet.forEach(({ name, value, options }) => + res.cookies.set(name, value, options), + ); }, }, }, diff --git a/package.json b/package.json index e49e9a9f..54c31ad3 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@dnd-kit/utilities": "^3.2.2", "@headlessui/react": "^2.1.2", "@heroicons/react": "^2.1.5", + "@lemonsqueezy/lemonsqueezy.js": "^3.2.0", "@observablehq/plot": "^0.6.15", "@radix-ui/react-collapsible": "^1.1.0", "@radix-ui/react-dropdown-menu": "^2.1.1", @@ -28,29 +29,29 @@ "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-switch": "^1.1.0", "@supabase/ssr": "^0.4.0", - "@supabase/supabase-js": "^2.44.4", + "@supabase/supabase-js": "^2.45.0", "@tailwindcss/typography": "^0.5.13", - "@tiptap/extension-bold": "^2.5.6", - "@tiptap/extension-bullet-list": "^2.5.6", - "@tiptap/extension-document": "^2.5.6", - "@tiptap/extension-history": "^2.5.6", - "@tiptap/extension-italic": "^2.5.6", - "@tiptap/extension-link": "^2.5.6", - "@tiptap/extension-list-item": "^2.5.6", - "@tiptap/extension-ordered-list": "^2.5.6", - "@tiptap/extension-paragraph": "^2.5.6", - "@tiptap/extension-placeholder": "^2.5.6", - "@tiptap/extension-text": "^2.5.6", - "@tiptap/extension-typography": "^2.5.6", - "@tiptap/extension-underline": "^2.5.6", - "@tiptap/extension-youtube": "^2.5.6", - "@tiptap/react": "^2.5.6", + "@tiptap/extension-bold": "^2.5.8", + "@tiptap/extension-bullet-list": "^2.5.8", + "@tiptap/extension-document": "^2.5.8", + "@tiptap/extension-history": "^2.5.8", + "@tiptap/extension-italic": "^2.5.8", + "@tiptap/extension-link": "^2.5.8", + "@tiptap/extension-list-item": "^2.5.8", + "@tiptap/extension-ordered-list": "^2.5.8", + "@tiptap/extension-paragraph": "^2.5.8", + "@tiptap/extension-placeholder": "^2.5.8", + "@tiptap/extension-text": "^2.5.8", + "@tiptap/extension-typography": "^2.5.8", + "@tiptap/extension-underline": "^2.5.8", + "@tiptap/extension-youtube": "^2.5.8", + "@tiptap/react": "^2.5.8", "@types/humanize-duration": "^3.27.4", "@types/lodash": "^4.17.7", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^7.17.0", - "@typescript-eslint/parser": "^7.17.0", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", "@uidotdev/usehooks": "^2.4.1", "@vercel/analytics": "^1.3.1", "@visx/responsive": "^3.10.2", @@ -65,19 +66,19 @@ "nanoid": "^5.0.7", "next": "canary", "prettier": "^3.3.3", - "prettier-plugin-organize-imports": "^3.2.4", + "prettier-plugin-organize-imports": "^4.0.0", "prettier-plugin-tailwindcss": "^0.6.5", "react": "canary", - "react-day-picker": "^8.10.1", + "react-day-picker": "8.10.1", "react-dom": "canary", "react-dropzone": "^14.2.3", "react-hook-form": "^7.52.1", "react-select": "^5.8.0", - "supabase": "^1.187.3", + "supabase": "^1.187.10", "tailwind-merge": "^2.4.0", "tailwindcss": "^3.4.7", "typescript": "^5.5.4", - "vercel": "^34.4.0", + "vercel": "^35.2.2", "xss": "^1.0.15" } } diff --git a/supabase/migrations/20240731040221_add-customers-table.sql b/supabase/migrations/20240731040221_add-customers-table.sql new file mode 100644 index 00000000..e1996172 --- /dev/null +++ b/supabase/migrations/20240731040221_add-customers-table.sql @@ -0,0 +1,20 @@ +create type "public"."subscription_status" as enum ('active', 'expired'); + +create table "public"."customers" ( + "id" uuid not null, + "customer_id" text not null, + "subscription_status" subscription_status not null +); + +alter table "public"."customers" enable row level security; +create unique index customers_pkey on public.customers using btree (id); +alter table "public"."customers" add constraint "customers_pkey" primary key using index "customers_pkey"; +alter table "public"."customers" add constraint "public_customers_id_fkey" foreign key (id) references auth.users(id) on update cascade on delete cascade not valid; +alter table "public"."customers" validate constraint "public_customers_id_fkey"; + +create policy "Owners can select." + on "public"."customers" + as permissive + for select + to authenticated + using ((id = auth.uid())); diff --git a/test b/test deleted file mode 100644 index e69de29b..00000000