feat: add supabase
This commit is contained in:
@@ -20,6 +20,7 @@
|
|||||||
"@headlessui/react": "^1.7.17",
|
"@headlessui/react": "^1.7.17",
|
||||||
"@planetscale/database": "^1.11.0",
|
"@planetscale/database": "^1.11.0",
|
||||||
"@react-email/render": "^0.0.10",
|
"@react-email/render": "^0.0.10",
|
||||||
|
"@supabase/supabase-js": "^2.42.0",
|
||||||
"@t3-oss/env-nextjs": "^0.7.0",
|
"@t3-oss/env-nextjs": "^0.7.0",
|
||||||
"@tailwindcss/forms": "^0.5.6",
|
"@tailwindcss/forms": "^0.5.6",
|
||||||
"@tanstack/react-query": "^4.32.6",
|
"@tanstack/react-query": "^4.32.6",
|
||||||
@@ -60,6 +61,7 @@
|
|||||||
"postcss": "^8.4.27",
|
"postcss": "^8.4.27",
|
||||||
"prettier": "^3.0.0",
|
"prettier": "^3.0.0",
|
||||||
"prettier-plugin-tailwindcss": "^0.5.1",
|
"prettier-plugin-tailwindcss": "^0.5.1",
|
||||||
|
"supabase": "^1.153.4",
|
||||||
"tailwind": "^4.0.0",
|
"tailwind": "^4.0.0",
|
||||||
"tailwind-scrollbar": "^3.0.5",
|
"tailwind-scrollbar": "^3.0.5",
|
||||||
"tailwindcss": "^3.3.3",
|
"tailwindcss": "^3.3.3",
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
import { sql } from '@vercel/postgres'
|
import { sql } from '@vercel/postgres'
|
||||||
import { drizzle } from 'drizzle-orm/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<Database>(supabaseUrl!, supabaseKey!);
|
||||||
|
|
||||||
import * as schema from "./schema";
|
import * as schema from "./schema";
|
||||||
|
|
||||||
|
|||||||
696
src/types/database.types.ts
Normal file
696
src/types/database.types.ts
Normal file
@@ -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<keyof Database, "public">]
|
||||||
|
|
||||||
|
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
|
||||||
4
supabase/.gitignore
vendored
Normal file
4
supabase/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Supabase
|
||||||
|
.branches
|
||||||
|
.temp
|
||||||
|
.env
|
||||||
161
supabase/config.toml
Normal file
161
supabase/config.toml
Normal file
@@ -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://<database>/<schema>/<hook_name>"
|
||||||
|
|
||||||
|
|
||||||
|
# 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. <bucket_name>.s3-<region>.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)"
|
||||||
0
supabase/seed.sql
Normal file
0
supabase/seed.sql
Normal file
Reference in New Issue
Block a user