From b54cfe8f914547e002710da390f01a411220e911 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 10 Apr 2024 21:10:10 +0100 Subject: [PATCH] feat: add supabase --- bun.lockb | Bin 361460 -> 373752 bytes package.json | 2 + src/server/db/index.ts | 6 + src/types/database.types.ts | 696 ++++++++++++++++++++++++++++++++++++ supabase/.gitignore | 4 + supabase/config.toml | 161 +++++++++ supabase/seed.sql | 0 7 files changed, 869 insertions(+) create mode 100644 src/types/database.types.ts create mode 100644 supabase/.gitignore create mode 100644 supabase/config.toml create mode 100644 supabase/seed.sql diff --git a/bun.lockb b/bun.lockb index 14216750cf20515e0beaf2a281a0f4025f96f1de..7e352b2971eca3b44a4287c07fc3ca3703c8a338 100755 GIT binary patch delta 92859 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 diff --git a/package.json b/package.json index e6549492..35e03c42 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@headlessui/react": "^1.7.17", "@planetscale/database": "^1.11.0", "@react-email/render": "^0.0.10", + "@supabase/supabase-js": "^2.42.0", "@t3-oss/env-nextjs": "^0.7.0", "@tailwindcss/forms": "^0.5.6", "@tanstack/react-query": "^4.32.6", @@ -60,6 +61,7 @@ "postcss": "^8.4.27", "prettier": "^3.0.0", "prettier-plugin-tailwindcss": "^0.5.1", + "supabase": "^1.153.4", "tailwind": "^4.0.0", "tailwind-scrollbar": "^3.0.5", "tailwindcss": "^3.3.3", diff --git a/src/server/db/index.ts b/src/server/db/index.ts index 1d2ddea5..f5b13af8 100644 --- a/src/server/db/index.ts +++ b/src/server/db/index.ts @@ -1,5 +1,11 @@ import { sql } from '@vercel/postgres' import { drizzle } from 'drizzle-orm/vercel-postgres' +import { createClient } from '@supabase/supabase-js' +import { type Database } from "~/types/database.types"; +const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL; +const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; + +export const supabase = createClient(supabaseUrl!, supabaseKey!); import * as schema from "./schema"; diff --git a/src/types/database.types.ts b/src/types/database.types.ts new file mode 100644 index 00000000..e88bc062 --- /dev/null +++ b/src/types/database.types.ts @@ -0,0 +1,696 @@ +export type Json = + | string + | number + | boolean + | null + | { [key: string]: Json | undefined } + | Json[] + +export type Database = { + public: { + Tables: { + _card_labels: { + Row: { + cardId: number + labelId: number + } + Insert: { + cardId: number + labelId: number + } + Update: { + cardId?: number + labelId?: number + } + Relationships: [ + { + foreignKeyName: "_card_labels_cardId_card_id_fk" + columns: ["cardId"] + isOneToOne: false + referencedRelation: "card" + referencedColumns: ["id"] + }, + { + foreignKeyName: "_card_labels_labelId_label_id_fk" + columns: ["labelId"] + isOneToOne: false + referencedRelation: "label" + referencedColumns: ["id"] + }, + ] + } + _card_workspace_members: { + Row: { + cardId: number + workspaceMemberId: number + } + Insert: { + cardId: number + workspaceMemberId: number + } + Update: { + cardId?: number + workspaceMemberId?: number + } + Relationships: [ + { + foreignKeyName: "_card_workspace_members_cardId_card_id_fk" + columns: ["cardId"] + isOneToOne: false + referencedRelation: "card" + referencedColumns: ["id"] + }, + { + foreignKeyName: "_card_workspace_members_workspaceMemberId_workspace_members_id_" + columns: ["workspaceMemberId"] + isOneToOne: false + referencedRelation: "workspace_members" + referencedColumns: ["id"] + }, + ] + } + account: { + Row: { + access_token: string | null + expires_at: number | null + id_token: string | null + provider: string + providerAccountId: string + refresh_token: string | null + scope: string | null + session_state: string | null + token_type: string | null + type: string + userId: string + } + Insert: { + access_token?: string | null + expires_at?: number | null + id_token?: string | null + provider: string + providerAccountId: string + refresh_token?: string | null + scope?: string | null + session_state?: string | null + token_type?: string | null + type: string + userId: string + } + Update: { + access_token?: string | null + expires_at?: number | null + id_token?: string | null + provider?: string + providerAccountId?: string + refresh_token?: string | null + scope?: string | null + session_state?: string | null + token_type?: string | null + type?: string + userId?: string + } + Relationships: [ + { + foreignKeyName: "account_userId_user_id_fk" + columns: ["userId"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + ] + } + board: { + Row: { + createdAt: string + createdBy: string + deletedAt: string | null + deletedBy: string | null + id: number + importId: number | null + name: string + publicId: string + updatedAt: string | null + workspaceId: number + } + Insert: { + createdAt?: string + createdBy: string + deletedAt?: string | null + deletedBy?: string | null + id?: number + importId?: number | null + name: string + publicId: string + updatedAt?: string | null + workspaceId: number + } + Update: { + createdAt?: string + createdBy?: string + deletedAt?: string | null + deletedBy?: string | null + id?: number + importId?: number | null + name?: string + publicId?: string + updatedAt?: string | null + workspaceId?: number + } + Relationships: [ + { + foreignKeyName: "board_createdBy_user_id_fk" + columns: ["createdBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + { + foreignKeyName: "board_deletedBy_user_id_fk" + columns: ["deletedBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + { + foreignKeyName: "board_importId_import_id_fk" + columns: ["importId"] + isOneToOne: false + referencedRelation: "import" + referencedColumns: ["id"] + }, + { + foreignKeyName: "board_workspaceId_workspace_id_fk" + columns: ["workspaceId"] + isOneToOne: false + referencedRelation: "workspace" + referencedColumns: ["id"] + }, + ] + } + card: { + Row: { + createdAt: string + createdBy: string + deletedAt: string | null + deletedBy: string | null + description: string | null + id: number + importId: number | null + index: number + listId: number + publicId: string + title: string + updatedAt: string | null + } + Insert: { + createdAt?: string + createdBy: string + deletedAt?: string | null + deletedBy?: string | null + description?: string | null + id?: number + importId?: number | null + index: number + listId: number + publicId: string + title: string + updatedAt?: string | null + } + Update: { + createdAt?: string + createdBy?: string + deletedAt?: string | null + deletedBy?: string | null + description?: string | null + id?: number + importId?: number | null + index?: number + listId?: number + publicId?: string + title?: string + updatedAt?: string | null + } + Relationships: [ + { + foreignKeyName: "card_createdBy_user_id_fk" + columns: ["createdBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + { + foreignKeyName: "card_deletedBy_user_id_fk" + columns: ["deletedBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + { + foreignKeyName: "card_importId_import_id_fk" + columns: ["importId"] + isOneToOne: false + referencedRelation: "import" + referencedColumns: ["id"] + }, + { + foreignKeyName: "card_listId_list_id_fk" + columns: ["listId"] + isOneToOne: false + referencedRelation: "list" + referencedColumns: ["id"] + }, + ] + } + import: { + Row: { + createdAt: string + createdBy: string + id: number + publicId: string + source: Database["public"]["Enums"]["source"] + status: Database["public"]["Enums"]["status"] + } + Insert: { + createdAt?: string + createdBy: string + id?: number + publicId: string + source: Database["public"]["Enums"]["source"] + status: Database["public"]["Enums"]["status"] + } + Update: { + createdAt?: string + createdBy?: string + id?: number + publicId?: string + source?: Database["public"]["Enums"]["source"] + status?: Database["public"]["Enums"]["status"] + } + Relationships: [ + { + foreignKeyName: "import_createdBy_user_id_fk" + columns: ["createdBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + ] + } + label: { + Row: { + boardId: number + colourCode: string | null + createdAt: string + createdBy: string + id: number + importId: number | null + name: string + publicId: string + updatedAt: string | null + } + Insert: { + boardId: number + colourCode?: string | null + createdAt?: string + createdBy: string + id?: number + importId?: number | null + name: string + publicId: string + updatedAt?: string | null + } + Update: { + boardId?: number + colourCode?: string | null + createdAt?: string + createdBy?: string + id?: number + importId?: number | null + name?: string + publicId?: string + updatedAt?: string | null + } + Relationships: [ + { + foreignKeyName: "label_boardId_board_id_fk" + columns: ["boardId"] + isOneToOne: false + referencedRelation: "board" + referencedColumns: ["id"] + }, + { + foreignKeyName: "label_createdBy_user_id_fk" + columns: ["createdBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + { + foreignKeyName: "label_importId_import_id_fk" + columns: ["importId"] + isOneToOne: false + referencedRelation: "import" + referencedColumns: ["id"] + }, + ] + } + list: { + Row: { + boardId: number + createdAt: string + createdBy: string + deletedAt: string | null + deletedBy: string | null + id: number + importId: number | null + index: number + name: string + publicId: string + updatedAt: string | null + } + Insert: { + boardId: number + createdAt?: string + createdBy: string + deletedAt?: string | null + deletedBy?: string | null + id?: number + importId?: number | null + index: number + name: string + publicId: string + updatedAt?: string | null + } + Update: { + boardId?: number + createdAt?: string + createdBy?: string + deletedAt?: string | null + deletedBy?: string | null + id?: number + importId?: number | null + index?: number + name?: string + publicId?: string + updatedAt?: string | null + } + Relationships: [ + { + foreignKeyName: "list_boardId_board_id_fk" + columns: ["boardId"] + isOneToOne: false + referencedRelation: "board" + referencedColumns: ["id"] + }, + { + foreignKeyName: "list_createdBy_user_id_fk" + columns: ["createdBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + { + foreignKeyName: "list_deletedBy_user_id_fk" + columns: ["deletedBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + { + foreignKeyName: "list_importId_import_id_fk" + columns: ["importId"] + isOneToOne: false + referencedRelation: "import" + referencedColumns: ["id"] + }, + ] + } + session: { + Row: { + expires: string + sessionToken: string + userId: string + } + Insert: { + expires: string + sessionToken: string + userId: string + } + Update: { + expires?: string + sessionToken?: string + userId?: string + } + Relationships: [ + { + foreignKeyName: "session_userId_user_id_fk" + columns: ["userId"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + ] + } + user: { + Row: { + email: string + emailVerified: string | null + id: string + image: string | null + name: string | null + } + Insert: { + email: string + emailVerified?: string | null + id: string + image?: string | null + name?: string | null + } + Update: { + email?: string + emailVerified?: string | null + id?: string + image?: string | null + name?: string | null + } + Relationships: [] + } + verificationToken: { + Row: { + expires: string + identifier: string + token: string + } + Insert: { + expires: string + identifier: string + token: string + } + Update: { + expires?: string + identifier?: string + token?: string + } + Relationships: [] + } + workspace: { + Row: { + createdAt: string + createdBy: string + deletedAt: string | null + deletedBy: string | null + id: number + name: string + publicId: string + slug: string + updatedAt: string | null + } + Insert: { + createdAt?: string + createdBy: string + deletedAt?: string | null + deletedBy?: string | null + id?: number + name: string + publicId: string + slug: string + updatedAt?: string | null + } + Update: { + createdAt?: string + createdBy?: string + deletedAt?: string | null + deletedBy?: string | null + id?: number + name?: string + publicId?: string + slug?: string + updatedAt?: string | null + } + Relationships: [ + { + foreignKeyName: "workspace_createdBy_user_id_fk" + columns: ["createdBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + { + foreignKeyName: "workspace_deletedBy_user_id_fk" + columns: ["deletedBy"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + ] + } + workspace_members: { + Row: { + createdAt: string + createdBy: string + deletedAt: string | null + id: number + publicId: string + role: Database["public"]["Enums"]["role"] + updatedAt: string | null + userId: string + workspaceId: number + } + Insert: { + createdAt?: string + createdBy: string + deletedAt?: string | null + id?: number + publicId: string + role: Database["public"]["Enums"]["role"] + updatedAt?: string | null + userId: string + workspaceId: number + } + Update: { + createdAt?: string + createdBy?: string + deletedAt?: string | null + id?: number + publicId?: string + role?: Database["public"]["Enums"]["role"] + updatedAt?: string | null + userId?: string + workspaceId?: number + } + Relationships: [ + { + foreignKeyName: "workspace_members_userId_user_id_fk" + columns: ["userId"] + isOneToOne: false + referencedRelation: "user" + referencedColumns: ["id"] + }, + { + foreignKeyName: "workspace_members_workspaceId_workspace_id_fk" + columns: ["workspaceId"] + isOneToOne: false + referencedRelation: "workspace" + referencedColumns: ["id"] + }, + ] + } + } + Views: { + [_ in never]: never + } + Functions: { + [_ in never]: never + } + Enums: { + role: "admin" | "member" | "guest" + source: "trello" + status: "started" | "success" | "failed" + } + CompositeTypes: { + [_ in never]: never + } + } +} + +type PublicSchema = Database[Extract] + +export type Tables< + PublicTableNameOrOptions extends + | keyof (PublicSchema["Tables"] & PublicSchema["Views"]) + | { schema: keyof Database }, + TableName extends PublicTableNameOrOptions extends { schema: keyof Database } + ? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] & + Database[PublicTableNameOrOptions["schema"]]["Views"]) + : never = never, +> = PublicTableNameOrOptions extends { schema: keyof Database } + ? (Database[PublicTableNameOrOptions["schema"]]["Tables"] & + Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends { + Row: infer R + } + ? R + : never + : PublicTableNameOrOptions extends keyof (PublicSchema["Tables"] & + PublicSchema["Views"]) + ? (PublicSchema["Tables"] & + PublicSchema["Views"])[PublicTableNameOrOptions] extends { + Row: infer R + } + ? R + : never + : never + +export type TablesInsert< + PublicTableNameOrOptions extends + | keyof PublicSchema["Tables"] + | { schema: keyof Database }, + TableName extends PublicTableNameOrOptions extends { schema: keyof Database } + ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"] + : never = never, +> = PublicTableNameOrOptions extends { schema: keyof Database } + ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Insert: infer I + } + ? I + : never + : PublicTableNameOrOptions extends keyof PublicSchema["Tables"] + ? PublicSchema["Tables"][PublicTableNameOrOptions] extends { + Insert: infer I + } + ? I + : never + : never + +export type TablesUpdate< + PublicTableNameOrOptions extends + | keyof PublicSchema["Tables"] + | { schema: keyof Database }, + TableName extends PublicTableNameOrOptions extends { schema: keyof Database } + ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"] + : never = never, +> = PublicTableNameOrOptions extends { schema: keyof Database } + ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { + Update: infer U + } + ? U + : never + : PublicTableNameOrOptions extends keyof PublicSchema["Tables"] + ? PublicSchema["Tables"][PublicTableNameOrOptions] extends { + Update: infer U + } + ? U + : never + : never + +export type Enums< + PublicEnumNameOrOptions extends + | keyof PublicSchema["Enums"] + | { schema: keyof Database }, + EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database } + ? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"] + : never = never, +> = PublicEnumNameOrOptions extends { schema: keyof Database } + ? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName] + : PublicEnumNameOrOptions extends keyof PublicSchema["Enums"] + ? PublicSchema["Enums"][PublicEnumNameOrOptions] + : never diff --git a/supabase/.gitignore b/supabase/.gitignore new file mode 100644 index 00000000..a3ad8805 --- /dev/null +++ b/supabase/.gitignore @@ -0,0 +1,4 @@ +# Supabase +.branches +.temp +.env diff --git a/supabase/config.toml b/supabase/config.toml new file mode 100644 index 00000000..16ff6371 --- /dev/null +++ b/supabase/config.toml @@ -0,0 +1,161 @@ +# A string used to distinguish different Supabase projects on the same host. Defaults to the +# working directory name when running `supabase init`. +project_id = "kan" + +[api] +enabled = true +# Port to use for the API URL. +port = 54321 +# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API +# endpoints. public and storage are always included. +schemas = ["public", "storage", "graphql_public"] +# Extra schemas to add to the search_path of every request. public is always included. +extra_search_path = ["public", "extensions"] +# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size +# for accidental or malicious requests. +max_rows = 1000 + +[db] +# Port to use for the local database URL. +port = 54322 +# Port used by db diff command to initialize the shadow database. +shadow_port = 54320 +# The database major version to use. This has to be the same as your remote database's. Run `SHOW +# server_version;` on the remote database to check. +major_version = 15 + +[db.pooler] +enabled = false +# Port to use for the local connection pooler. +port = 54329 +# Specifies when a server connection can be reused by other clients. +# Configure one of the supported pooler modes: `transaction`, `session`. +pool_mode = "transaction" +# How many server connections to allow per user/database pair. +default_pool_size = 20 +# Maximum number of client connections allowed. +max_client_conn = 100 + +[realtime] +enabled = true +# Bind realtime via either IPv4 or IPv6. (default: IPv6) +# ip_version = "IPv6" +# The maximum length in bytes of HTTP request headers. (default: 4096) +# max_header_length = 4096 + +[studio] +enabled = true +# Port to use for Supabase Studio. +port = 54323 +# External URL of the API server that frontend connects to. +api_url = "http://127.0.0.1" +# OpenAI API Key to use for Supabase AI in the Supabase Studio. +openai_api_key = "env(OPENAI_API_KEY)" + +# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they +# are monitored, and you can view the emails that would have been sent from the web interface. +[inbucket] +enabled = true +# Port to use for the email testing server web interface. +port = 54324 +# Uncomment to expose additional ports for testing user applications that send emails. +# smtp_port = 54325 +# pop3_port = 54326 + +[storage] +enabled = true +# The maximum file size allowed (e.g. "5MB", "500KB"). +file_size_limit = "50MiB" + +[auth] +enabled = true +# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used +# in emails. +site_url = "http://127.0.0.1:3000" +# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. +additional_redirect_urls = ["https://127.0.0.1:3000"] +# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week). +jwt_expiry = 3600 +# If disabled, the refresh token will never expire. +enable_refresh_token_rotation = true +# Allows refresh tokens to be reused after expiry, up to the specified interval in seconds. +# Requires enable_refresh_token_rotation = true. +refresh_token_reuse_interval = 10 +# Allow/disallow new user signups to your project. +enable_signup = true +# Allow/disallow testing manual linking of accounts +enable_manual_linking = false + +[auth.email] +# Allow/disallow new user signups via email to your project. +enable_signup = true +# If enabled, a user will be required to confirm any email change on both the old, and new email +# addresses. If disabled, only the new email is required to confirm. +double_confirm_changes = true +# If enabled, users need to confirm their email address before signing in. +enable_confirmations = false + +# Uncomment to customize email template +# [auth.email.template.invite] +# subject = "You have been invited" +# content_path = "./supabase/templates/invite.html" + +[auth.sms] +# Allow/disallow new user signups via SMS to your project. +enable_signup = true +# If enabled, users need to confirm their phone number before signing in. +enable_confirmations = false +# Template for sending OTP to users +template = "Your code is {{ .Code }} ." + +# Use pre-defined map of phone number to OTP for testing. +[auth.sms.test_otp] +# 4152127777 = "123456" + +# This hook runs before a token is issued and allows you to add additional claims based on the authentication method used. +[auth.hook.custom_access_token] +# enabled = true +# uri = "pg-functions:////" + + +# Configure one of the supported SMS providers: `twilio`, `twilio_verify`, `messagebird`, `textlocal`, `vonage`. +[auth.sms.twilio] +enabled = false +account_sid = "" +message_service_sid = "" +# DO NOT commit your Twilio auth token to git. Use environment variable substitution instead: +auth_token = "env(SUPABASE_AUTH_SMS_TWILIO_AUTH_TOKEN)" + +# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, +# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin_oidc`, `notion`, `twitch`, +# `twitter`, `slack`, `spotify`, `workos`, `zoom`. +[auth.external.apple] +enabled = false +client_id = "" +# DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead: +secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)" +# Overrides the default auth redirectUrl. +redirect_uri = "" +# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, +# or any other third-party OIDC providers. +url = "" + +[analytics] +enabled = false +port = 54327 +vector_port = 54328 +# Configure one of the supported backends: `postgres`, `bigquery`. +backend = "postgres" + +# Experimental features may be deprecated any time +[experimental] +# Configures Postgres storage engine to use OrioleDB (S3) +orioledb_version = "" +# Configures S3 bucket URL, eg. .s3-.amazonaws.com +s3_host = "env(S3_HOST)" +# Configures S3 bucket region, eg. us-east-1 +s3_region = "env(S3_REGION)" +# Configures AWS_ACCESS_KEY_ID for S3 bucket +s3_access_key = "env(S3_ACCESS_KEY)" +# Configures AWS_SECRET_ACCESS_KEY for S3 bucket +s3_secret_key = "env(S3_SECRET_KEY)" diff --git a/supabase/seed.sql b/supabase/seed.sql new file mode 100644 index 00000000..e69de29b