Files
shunzi 23b117a3fa feat: 初始化公网编辑器后端项目
- 配置 Next.js 14 + TypeScript + TailwindCSS
- 集成 Supabase (Auth + Storage + Database)
- 实现认证 API (login/logout/me)
- 实现文件存储 API (upload/list/get/delete)
- 实现数据库操作 API (tables/query)
- 添加 Supabase 初始化 SQL 脚本
- 添加环境变量配置示例
- 添加项目文档
2026-03-17 01:03:03 +08:00

95 lines
2.5 KiB
PL/PgSQL

-- Enable UUID extension
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- Create files table
CREATE TABLE IF NOT EXISTS files (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
name TEXT NOT NULL,
path TEXT NOT NULL,
size BIGINT NOT NULL,
mime_type TEXT NOT NULL,
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Create index on user_id for faster queries
CREATE INDEX IF NOT EXISTS idx_files_user_id ON files(user_id);
-- Create index on created_at for sorting
CREATE INDEX IF NOT EXISTS idx_files_created_at ON files(created_at DESC);
-- Enable Row Level Security
ALTER TABLE files ENABLE ROW LEVEL SECURITY;
-- Create policy to allow users to see only their own files
CREATE POLICY "Users can view their own files"
ON files
FOR SELECT
USING (auth.uid() = user_id);
-- Create policy to allow users to insert their own files
CREATE POLICY "Users can insert their own files"
ON files
FOR INSERT
WITH CHECK (auth.uid() = user_id);
-- Create policy to allow users to update their own files
CREATE POLICY "Users can update their own files"
ON files
FOR UPDATE
USING (auth.uid() = user_id);
-- Create policy to allow users to delete their own files
CREATE POLICY "Users can delete their own files"
ON files
FOR DELETE
USING (auth.uid() = user_id);
-- Create storage bucket for files
INSERT INTO storage.buckets (id, name, public)
VALUES ('files', 'files', true)
ON CONFLICT (id) DO NOTHING;
-- Create policy to allow authenticated users to upload files
CREATE POLICY "Users can upload files"
ON storage.objects
FOR INSERT
WITH CHECK (
bucket_id = 'files' AND
auth.uid()::text = (storage.foldername(name))[1]
);
-- Create policy to allow users to view their own files
CREATE POLICY "Users can view their own files"
ON storage.objects
FOR SELECT
USING (
bucket_id = 'files' AND
auth.uid()::text = (storage.foldername(name))[1]
);
-- Create policy to allow users to delete their own files
CREATE POLICY "Users can delete their own files"
ON storage.objects
FOR DELETE
USING (
bucket_id = 'files' AND
auth.uid()::text = (storage.foldername(name))[1]
);
-- Create updated_at trigger function
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Create trigger to auto-update updated_at
CREATE TRIGGER update_files_updated_at
BEFORE UPDATE ON files
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();