awesome/src/db/schema.sql
cheney c09857cc81
All checks were successful
Build and Deploy / build (push) Successful in 56s
Build and Deploy / deploy (push) Successful in 28s
feat: 登录记住本机+密码可见、内容分简介与主体、Markdown 渲染、首页随机条目
2026-09-01 10:53:17 +08:00

92 lines
2.8 KiB
SQL

CREATE SEQUENCE IF NOT EXISTS users_id_seq;
CREATE SEQUENCE IF NOT EXISTS sources_id_seq;
CREATE SEQUENCE IF NOT EXISTS source_runs_id_seq;
CREATE SEQUENCE IF NOT EXISTS entries_id_seq;
CREATE SEQUENCE IF NOT EXISTS tags_id_seq;
CREATE SEQUENCE IF NOT EXISTS comments_id_seq;
CREATE SEQUENCE IF NOT EXISTS audit_logs_id_seq;
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY DEFAULT nextval('users_id_seq'),
username VARCHAR UNIQUE NOT NULL,
password_hash VARCHAR NOT NULL,
role VARCHAR NOT NULL DEFAULT 'editor',
status VARCHAR NOT NULL DEFAULT 'active',
last_login_at TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS sources (
id INTEGER PRIMARY KEY DEFAULT nextval('sources_id_seq'),
kind VARCHAR NOT NULL,
name VARCHAR UNIQUE NOT NULL,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
url VARCHAR,
adapter VARCHAR,
cron_expr VARCHAR DEFAULT '0 9 * * 1',
api_key_hash VARCHAR,
api_key VARCHAR,
direct_publish BOOLEAN NOT NULL DEFAULT FALSE,
last_run_at TIMESTAMPTZ,
last_run_status VARCHAR
);
CREATE TABLE IF NOT EXISTS source_runs (
id INTEGER PRIMARY KEY DEFAULT nextval('source_runs_id_seq'),
source_id INTEGER NOT NULL REFERENCES sources(id),
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
finished_at TIMESTAMPTZ,
status VARCHAR,
found INTEGER DEFAULT 0,
created INTEGER DEFAULT 0,
skipped INTEGER DEFAULT 0,
error TEXT
);
CREATE TABLE IF NOT EXISTS tags (
id INTEGER PRIMARY KEY DEFAULT nextval('tags_id_seq'),
name VARCHAR NOT NULL,
parent_id INTEGER REFERENCES tags(id),
sort INTEGER NOT NULL DEFAULT 0
);
CREATE TABLE IF NOT EXISTS entries (
id INTEGER PRIMARY KEY DEFAULT nextval('entries_id_seq'),
title VARCHAR NOT NULL,
slug VARCHAR UNIQUE NOT NULL,
type VARCHAR NOT NULL,
summary VARCHAR DEFAULT '',
description_md TEXT DEFAULT '',
url VARCHAR DEFAULT '',
license VARCHAR DEFAULT '',
stars BIGINT DEFAULT 0,
status VARCHAR NOT NULL DEFAULT 'pending',
source_id INTEGER REFERENCES sources(id),
verified_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS entry_tags (
entry_id INTEGER NOT NULL REFERENCES entries(id),
tag_id INTEGER NOT NULL REFERENCES tags(id),
PRIMARY KEY (entry_id, tag_id)
);
CREATE TABLE IF NOT EXISTS comments (
id INTEGER PRIMARY KEY DEFAULT nextval('comments_id_seq'),
entry_id INTEGER NOT NULL REFERENCES entries(id),
user_id INTEGER REFERENCES users(id),
author_name VARCHAR NOT NULL,
body TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS audit_logs (
id INTEGER PRIMARY KEY DEFAULT nextval('audit_logs_id_seq'),
actor VARCHAR NOT NULL,
action VARCHAR NOT NULL,
target VARCHAR DEFAULT '',
detail TEXT DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);