归档 artalk-cf 评论后端 + rss-robot 到 blog-admin(含技术选型/模块分布 README)
This commit is contained in:
1 parent
e1323bd260
commit
299ab57e4d
98 files changed
+15657
No files matched your search
@@ -0,0 +1,196 @@
|
||||
export interface Env {
|
||||
DB: D1Database;
|
||||
/** RSS 订阅数据(rss-robot 合并进来,KV 与 D1 共存于同一 Worker) */
|
||||
RSS_KV: KVNamespace;
|
||||
UPLOADS?: R2Bucket;
|
||||
ASSETS?: Fetcher;
|
||||
|
||||
// ---- RSS 订阅(rss-robot-cf 合并进来的 vars/secrets)----
|
||||
FEEDS_URL?: string;
|
||||
SCF_PROXY_URL?: string;
|
||||
FEISHU_WEBHOOK_URL?: string;
|
||||
SITE_TOKEN?: string;
|
||||
WECHAT_APPID?: string;
|
||||
WECHAT_APPSECRET?: string;
|
||||
DEEPSEEK_API_KEY?: string;
|
||||
|
||||
SITE_DEFAULT: string;
|
||||
SITE_URL: string;
|
||||
/** 站内公开 API 基址,如 https://api.200181.xyz(拼绝对 favicon 地址用) */
|
||||
PUBLIC_API_BASE?: string;
|
||||
ADMIN_NAME: string;
|
||||
ADMIN_EMAIL: string;
|
||||
ADMIN_PASSWORD: string;
|
||||
TOKEN_SECRET: string;
|
||||
ALLOWED_ORIGINS: string;
|
||||
ITEMS_PER_PAGE: string;
|
||||
PENDING_DEFAULT: string;
|
||||
IMG_UPLOAD_ENABLED?: string;
|
||||
|
||||
// ---- 邮件通知(可选,走 Resend 的 HTTP API;Workers 没有 TCP,发不了 SMTP)
|
||||
// 两个都走 `wrangler secret put`,不要写进 wrangler.toml 的 [vars]
|
||||
RESEND_API_KEY?: string;
|
||||
MAIL_FROM?: string; // 形如 `artalk <noreply@200181.xyz>`,域名要先在 Resend 验证过
|
||||
/**
|
||||
* 发件人显示名。可选;留空就用 MAIL_FROM 里那段名字。
|
||||
* 对应旧 artalk.yml 的 `email.send_name`。
|
||||
*/
|
||||
MAIL_FROM_NAME?: string;
|
||||
/**
|
||||
* 管理员通知的收件地址。
|
||||
* **不要**复用 ADMIN_EMAIL —— 那个是后台登录标识,改成真实邮箱会影响登录。
|
||||
* 不配这一项就只发「回复提醒」,不发管理员通知。
|
||||
*/
|
||||
MAIL_ADMIN?: string;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- 数据库实体
|
||||
|
||||
export interface SiteRow {
|
||||
id: number;
|
||||
name: string;
|
||||
urls: string;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
}
|
||||
|
||||
export interface PageRow {
|
||||
id: number;
|
||||
key: string;
|
||||
site_name: string;
|
||||
title: string;
|
||||
admin_only: number;
|
||||
pv: number;
|
||||
vote_up: number;
|
||||
vote_down: number;
|
||||
accessible_url: string;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
}
|
||||
|
||||
export interface UserRow {
|
||||
id: number;
|
||||
name: string;
|
||||
email: string;
|
||||
link: string;
|
||||
password: string;
|
||||
badge_name: string;
|
||||
badge_color: string;
|
||||
title_name: string;
|
||||
last_ip: string;
|
||||
last_ua: string;
|
||||
is_admin: number;
|
||||
receive_email: number;
|
||||
is_in_conf: number;
|
||||
token_valid_from: number;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
}
|
||||
|
||||
export interface CommentRow {
|
||||
id: number;
|
||||
content: string;
|
||||
page_key: string;
|
||||
site_name: string;
|
||||
user_id: number;
|
||||
rid: number;
|
||||
root_id: number;
|
||||
is_collapsed: number;
|
||||
is_pending: number;
|
||||
is_pinned: number;
|
||||
is_verified: number;
|
||||
vote_up: number;
|
||||
vote_down: number;
|
||||
ua: string;
|
||||
ip: string;
|
||||
ip_region: string;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
deleted_at: number;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------- API 输出(与 Artalk 对齐)
|
||||
|
||||
export interface CookedComment {
|
||||
id: number;
|
||||
content: string;
|
||||
content_marked: string;
|
||||
user_id: number;
|
||||
nick: string;
|
||||
email_encrypted: string;
|
||||
link: string;
|
||||
ua: string;
|
||||
date: string;
|
||||
is_collapsed: boolean;
|
||||
is_pending: boolean;
|
||||
is_pinned: boolean;
|
||||
is_allow_reply: boolean;
|
||||
is_verified: boolean;
|
||||
rid: number;
|
||||
badge_name: string;
|
||||
badge_color: string;
|
||||
/** 头衔徽章(金色,管理员手动设置,优先级仅次于系统徽章) */
|
||||
title_name?: string;
|
||||
/** 评论等级(九品官阶)——独立于官方 badge 槽,按全站真实评论数由后端计算 */
|
||||
rank_name?: string;
|
||||
rank_title?: string;
|
||||
rank_count?: number;
|
||||
rank_color?: string;
|
||||
rank_bg?: string;
|
||||
ip_region?: string;
|
||||
visible: boolean;
|
||||
vote_up: number;
|
||||
vote_down: number;
|
||||
page_key: string;
|
||||
page_url: string;
|
||||
site_name: string;
|
||||
}
|
||||
|
||||
export interface CookedPage {
|
||||
id: number;
|
||||
admin_only: boolean;
|
||||
key: string;
|
||||
url: string;
|
||||
title: string;
|
||||
site_name: string;
|
||||
vote_up: number;
|
||||
vote_down: number;
|
||||
pv: number;
|
||||
date: string;
|
||||
}
|
||||
|
||||
export interface CookedUser {
|
||||
id: number;
|
||||
name: string;
|
||||
email: string;
|
||||
link: string;
|
||||
badge_name: string;
|
||||
badge_color: string;
|
||||
title_name?: string;
|
||||
is_admin: boolean;
|
||||
receive_email: boolean;
|
||||
}
|
||||
|
||||
export interface CookedSite {
|
||||
id: number;
|
||||
name: string;
|
||||
urls: string[];
|
||||
urls_raw: string;
|
||||
first_url: string;
|
||||
}
|
||||
|
||||
export interface CookedNotify {
|
||||
id: number;
|
||||
user_id: number;
|
||||
comment_id: number;
|
||||
is_read: boolean;
|
||||
is_emailed: boolean;
|
||||
read_link: string;
|
||||
}
|
||||
|
||||
export interface SessionUser {
|
||||
id: number;
|
||||
name: string;
|
||||
email: string;
|
||||
isAdmin: boolean;
|
||||
}
|
||||
Reference in new issue
Block a user