-- 广场。Snowflake post_id;content 为 VARBINARY 序列化 JSON 字节。 CREATE TABLE IF NOT EXISTS square_posts ( id BIGINT PRIMARY KEY COMMENT 'Snowflake 帖 id,Feed 游标', user_id BIGINT NOT NULL COMMENT '作者 users.id', kind SMALLINT NOT NULL COMMENT '1纯文 2图 3视频', text VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '正文,可空;与媒体至少有一项', content VARBINARY(16384) NOT NULL COMMENT '序列化 JSON 字节(json.Marshal),图/视频只存 object_key', poi_lat DOUBLE NOT NULL DEFAULT 0 COMMENT '地点纬度', poi_lng DOUBLE NOT NULL DEFAULT 0 COMMENT '地点经度', poi_name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '地点名称', poi_address VARCHAR(256) NOT NULL DEFAULT '' COMMENT '地点地址', visibility SMALLINT NOT NULL DEFAULT 0 COMMENT '0全站公开 1仅自己 2白名单 3黑名单', audit_status SMALLINT NOT NULL DEFAULT 1 COMMENT '0待审 1通过 2拒绝;v1 发帖为 1', audit_note VARCHAR(256) NOT NULL DEFAULT '' COMMENT '拒绝原因', audited_at DATETIME(3) NULL COMMENT '审核时间', status SMALLINT NOT NULL DEFAULT 0 COMMENT '0正常 1已删', like_count INT NOT NULL DEFAULT 0 COMMENT '点赞数', comment_count INT NOT NULL DEFAULT 0 COMMENT '未删评论数', created_at DATETIME(3) NOT NULL COMMENT '发帖时间', KEY idx_public_feed (audit_status, visibility, id), KEY idx_user (user_id, id) ) COMMENT='广场帖'; CREATE TABLE IF NOT EXISTS square_audience ( post_id BIGINT NOT NULL COMMENT '帖 id', peer_id BIGINT NOT NULL COMMENT '白名单能看 / 黑名单不能看 的好友 uid', PRIMARY KEY (post_id, peer_id) ) COMMENT='广场部分可见名单'; CREATE TABLE IF NOT EXISTS square_likes ( post_id BIGINT NOT NULL COMMENT '帖 id', user_id BIGINT NOT NULL COMMENT '点赞人', created_at DATETIME(3) NOT NULL COMMENT '点赞时间', PRIMARY KEY (post_id, user_id) ) COMMENT='广场点赞'; CREATE TABLE IF NOT EXISTS square_comments ( id BIGINT PRIMARY KEY COMMENT 'Snowflake 评论 id', post_id BIGINT NOT NULL COMMENT '帖 id', user_id BIGINT NOT NULL COMMENT '评论人', reply_to_id BIGINT NOT NULL DEFAULT 0 COMMENT '父评论 id,0 表示直接评帖', reply_to_uid BIGINT NOT NULL DEFAULT 0 COMMENT '被回复用户', text VARCHAR(500) NOT NULL COMMENT '评论文本', status SMALLINT NOT NULL DEFAULT 0 COMMENT '0正常 1已删', created_at DATETIME(3) NOT NULL COMMENT '评论时间', KEY idx_post (post_id, id) ) COMMENT='广场评论'; CREATE TABLE IF NOT EXISTS square_notices ( id BIGINT PRIMARY KEY COMMENT 'Snowflake 通知 id', to_user_id BIGINT NOT NULL COMMENT '接收人', from_user_id BIGINT NOT NULL COMMENT '动作发起人', kind SMALLINT NOT NULL COMMENT '1赞 2评论 3回复', post_id BIGINT NOT NULL COMMENT '帖 id', comment_id BIGINT NOT NULL DEFAULT 0 COMMENT '评论 id,赞为 0', read_at DATETIME(3) NULL COMMENT '已读时间', created_at DATETIME(3) NOT NULL COMMENT '通知时间', KEY idx_to_user (to_user_id, id) ) COMMENT='广场赞评通知'; CREATE TABLE IF NOT EXISTS square_notice_state ( user_id BIGINT PRIMARY KEY COMMENT '用户 users.id', last_read_notice_id BIGINT NOT NULL DEFAULT 0 COMMENT '互动通知已读水位', updated_at DATETIME(3) NOT NULL COMMENT '更新时间' ) COMMENT='广场通知未读水位';