Xiuno BBS 重构记录贴(七)论坛社交互动功能增强
贰先生 2小时前

# 论坛社交互动功能增强 Spec

## Why
当前 Xiuno BBS 缺乏 论坛应有的核心社交互动功能:版块无分区归类导致版块多时难以管理、帖子缺乏点赞/收藏等互动手段导致用户参与度低、用户之间无法关注导致社区粘性不足。这些是论坛系统的基本功能,需要作为核心功能内置。

## What Changes
- **版块分区**:在 `bbs_forum` 表新增 `fup` 字段支持两级结构(分区→版块),分区作为分组容器不可直接发帖
- **帖子点赞**:新增 `bbs_post_like` 表,支持对主题帖和回帖都点赞,`bbs_thread` 和 `bbs_post` 表新增 `likes` 计数字段
- **帖子收藏**:新增 `bbs_thread_favorite` 表,支持收藏主题帖,`bbs_thread` 新增 `favorites` 计数字段,`bbs_user` 新增 `favorites` 计数字段
- **用户关注**:新增 `bbs_user_follow` 表,支持关注/取关,`bbs_user` 新增 `follows`/`followeds` 计数字段
- **通知系统**:新增 `bbs_notify` 表,关注用户发帖时推送通知,点赞/收藏时可选择推送通知
- **动态流**:新增"我的动态"页面,展示关注用户的最新帖子

## Impact
- Affected code:
  - `install/install.sql` — 新增 4 张表,修改 3 张表结构
  - `model/forum.func.php` — 分区支持、树形格式化
  - `model/thread.func.php` — 点赞/收藏计数
  - `model/user.func.php` — 关注计数
  - `route/thread.php` — 点赞/收藏 API
  - `route/user.php` — 关注 API、动态流
  - `route/my.php` — 我的收藏、我的关注、我的通知
  - `view/htm/forum.htm` — 分区展示
  - `view/htm/thread.htm` — 点赞/收藏按钮
  - `view/htm/post_list.inc.htm` — 回帖点赞按钮
  - `view/htm/user.htm` — 关注按钮
  - `admin/route/forum.php` + `admin/view/htm/forum_update.htm` — 分区管理
  - `lang/zh-cn/bbs.php` — 新增语言项

## ADDED Requirements

### Requirement: 版块分区(两级:分区→版块)
系统 SHALL 支持两级版块结构,分区作为分组容器不可直接发帖,版块归属分区并可发帖。

#### Scenario: 创建分区
- **WHEN** 管理员在后台创建版块时选择类型为"分区"
- **THEN** 该版块的 `fup=0`,不显示发帖入口,仅作为分组容器

#### Scenario: 创建版块并归属分区
- **WHEN** 管理员创建版块时选择上级分区
- **THEN** 该版块的 `fup` 设置为分区 fid,首页按分区分组展示

#### Scenario: 首页分区展示
- **WHEN** 用户访问首页
- **THEN** 版块列表按分区分组展示,未归属分区的版块归入"默认分区"

#### Scenario: 删除分区
- **WHEN** 管理员删除分区
- **THEN** 该分区下的版块的 `fup` 重置为 0,版块和帖子不被删除

### Requirement: 帖子点赞
系统 SHALL 支持对主题帖和回帖点赞,每个用户对同一帖子只能点赞一次,可取消点赞。

#### Scenario: 点赞主题帖
- **WHEN** 登录用户点击主题帖的点赞按钮
- **THEN** 记录点赞关系,主题帖 `likes+1`,按钮变为已点赞状态

#### Scenario: 取消点赞
- **WHEN** 已点赞用户再次点击点赞按钮
- **THEN** 删除点赞记录,帖子 `likes-1`,按钮恢复未点赞状态

#### Scenario: 点赞回帖
- **WHEN** 登录用户点击回帖的点赞按钮
- **THEN** 记录点赞关系,回帖 `likes+1`,主题帖 `likes` 也 +1(主题 likes 为所有回帖 likes 之和)

#### Scenario: 未登录用户
- **WHEN** 未登录用户点击点赞按钮
- **THEN** 提示需要登录

### Requirement: 帖子收藏
系统 SHALL 支持对主题帖收藏,每个用户对同一主题只能收藏一次,可取消收藏。

#### Scenario: 收藏主题帖
- **WHEN** 登录用户点击主题帖的收藏按钮
- **THEN** 记录收藏关系,主题帖 `favorites+1`,用户 `favorites+1`

#### Scenario: 取消收藏
- **WHEN** 已收藏用户再次点击收藏按钮
- **THEN** 删除收藏记录,主题帖 `favorites-1`,用户 `favorites-1`

#### Scenario: 查看我的收藏
- **WHEN** 用户访问"我的收藏"页面
- **THEN** 展示用户收藏的主题帖列表,按收藏时间倒序

### Requirement: 用户关注
系统 SHALL 支持用户关注其他用户,不可关注自己,可取消关注。

#### Scenario: 关注用户
- **WHEN** 登录用户点击其他用户的关注按钮
- **THEN** 记录关注关系,当前用户 `follows+1`,被关注用户 `followeds+1`

#### Scenario: 取消关注
- **WHEN** 已关注用户再次点击关注按钮
- **THEN** 删除关注记录,当前用户 `follows-1`,被关注用户 `followeds-1`

#### Scenario: 查看我的关注/粉丝
- **WHEN** 用户访问个人页面的关注/粉丝列表
- **THEN** 展示关注列表和粉丝列表

### Requirement: 通知系统
系统 SHALL 在以下事件发生时给相关用户推送站内通知:关注用户发新帖、帖子被点赞、帖子被收藏。

#### Scenario: 关注用户发帖通知
- **WHEN** 被关注用户发表新主题帖
- **THEN** 所有关注者收到一条通知"xxx 发表了新帖: [主题标题]"

#### Scenario: 帖子被点赞通知
- **WHEN** 用户的帖子被他人点赞
- **THEN** 帖子作者收到一条通知"xxx 赞了你的帖子"

#### Scenario: 帖子被收藏通知
- **WHEN** 用户的帖子被他人收藏
- **THEN** 帖子作者收到一条通知"xxx 收藏了你的帖子"

#### Scenario: 查看通知
- **WHEN** 用户访问通知页面
- **THEN** 展示未读和已读通知列表,未读通知标记为已读

#### Scenario: 通知角标
- **WHEN** 用户有未读通知
- **THEN** 导航栏通知图标显示未读数量角标

### Requirement: 动态流
系统 SHALL 提供"我的动态"页面,展示关注用户的最新帖子。

#### Scenario: 查看动态
- **WHEN** 用户访问"我的动态"页面
- **THEN** 展示所有关注用户发表的主题帖,按发帖时间倒序,分页展示

## MODIFIED Requirements

### Requirement: bbs_forum 表结构
在原有字段基础上新增 `fup` 字段:
- `fup` int(11) unsigned NOT NULL DEFAULT '0' — 上级分区 fid,0 表示分区或未归类版块
- `type` tinyint(1) NOT NULL DEFAULT '0' — 0=版块 1=分区

### Requirement: bbs_thread 表结构
新增字段:
- `likes` int(11) NOT NULL DEFAULT '0' — 点赞数
- `favorites` int(11) NOT NULL DEFAULT '0' — 收藏数

### Requirement: bbs_post 表结构
新增字段:
- `likes` int(11) NOT NULL DEFAULT '0' — 点赞数

### Requirement: bbs_user 表结构
新增字段:
- `follows` int(11) NOT NULL DEFAULT '0' — 关注数
- `followeds` int(11) NOT NULL DEFAULT '0' — 粉丝数
- `favorites` int(11) NOT NULL DEFAULT '0' — 收藏数

## REMOVED Requirements
无移除项,所有新增功能与现有系统兼容。
最新回复 (0)
全部楼主
返回