CREATE TABLE users (
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
role TEXT DEFAULT 'student',
avatar_url TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE courses (
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
teacher_id UUID REFERENCES users(id),
title TEXT NOT NULL,
category TEXT,
price INTEGER DEFAULT 0,
is_free BOOLEAN DEFAULT true,
status TEXT DEFAULT 'pending',
is_public BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE enrollments (
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
user_id UUID REFERENCES users(id),
course_id UUID REFERENCES courses(id),
paid_amount INTEGER DEFAULT 0,
progress INTEGER DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE materials (
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
uploader_id UUID REFERENCES users(id),
course_id UUID REFERENCES courses(id),
title TEXT NOT NULL,
file_url TEXT,
file_type TEXT,
is_shared BOOLEAN DEFAULT true,
download_count INTEGER DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE diaries (
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
user_id UUID REFERENCES users(id),
title TEXT NOT NULL,
body TEXT,
is_shared BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE events (
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
user_id UUID REFERENCES users(id),
title TEXT NOT NULL,
event_date DATE NOT NULL,
event_time TIME,
color TEXT DEFAULT '#FF6B6B',
is_shared BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE settlements (
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
teacher_id UUID REFERENCES users(id),
gross_amount INTEGER,
fee_rate DECIMAL DEFAULT 0.10,
net_amount INTEGER,
status TEXT DEFAULT 'pending',
settled_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);