Skip to content

Commit

Permalink
Complete web data statistics function and top posts ranking function
Browse files Browse the repository at this point in the history
  • Loading branch information
Veal98 committed Jan 31, 2021
1 parent db263d3 commit 4083850
Show file tree
Hide file tree
Showing 51 changed files with 28,622 additions and 3,593 deletions.
101 changes: 68 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,29 @@

---

## 🎁 从本项目你能学到什么
## 📚 从本项目你能学到什么

- 学会主流的 Java Web 开发技术和框架
- 积累一个真实的 Web 项目开发经验
- 掌握本项目中涉及的常见面试题的答题策略

## 💻 核心技术栈

后端:
后端:

- Spring
- Spring Boot 2.1.5 RELEASE
- Spring MVC
- ORM:MyBatis
- 数据库:MySQL 5.7
- 日志:SLF4J(日志接口) + Logback(日志实现)
- 缓存:Redis
- 消息队列:Kafka 2.13-2.7.0
- 搜索引擎:Elasticsearch 6.4.3
- 安全:Spring Security
- 邮件:Spring Mail
- 分布式定时任务:Spring Quartz
- 监控:Spring Actuator
- 日志:SLF4J(日志接口) + Logback(日志实现)

前端:

Expand All @@ -33,19 +35,23 @@

## 🔨 开发环境

- 操作系统:Windows 10
- 构建工具:Apache Maven
- 集成开发工具:Intellij IDEA
- 数据库:MySQL 5.7、Redis
- 数据库:MySQL 5.7
- 应用服务器:Apache Tomcat
- 接口测试工具:Postman
- 版本控制工具:Git

## 🔔 功能列表
## 🎨 功能列表

- [x] 注册(MySQL)
- [x] **注册**(MySQL)

- 用户注册成功,将用户信息存入 MySQL,但此时该用户状态为未激活
- 向用户发送激活邮件,用户点击链接则激活账号
- 向用户发送激活邮件,用户点击链接则激活账号(Spring Mail)

- [x] **登录 | 登出**(MySQL、Redis)

- [x] 登录 | 登出(MySQL、Redis)
- 进入登录界面,动态生成验证码,并将验证码短暂存入 Redis(60 秒)

- 用户登录成功(验证用户名、密码、验证码),生成登录凭证且设置状态为有效,并将登录凭证存入 Redis
Expand All @@ -58,23 +64,34 @@

- 用户登出,将凭证状态设为无效,并更新 Redis 中该用户的登录凭证信息

- [x] 账号设置(MySQL)
- [x] **账号设置**(MySQL)

- 修改头像
- 修改密码

- [x] 检查登录状态(禁止未登录用户访问需要登录权限的界面,后续会使用 Spring Security 接管)

- [x] 帖子模块(MySQL)
- [x] **帖子模块**(MySQL)

- 发布帖子(过滤敏感词),将其存入 MySQL
- 分页显示所有的帖子
- 支持按照 “发帖时间” 显示
- 支持按照 “热度排行” 显示(Spring Quartz)
- 查看帖子详情
- 权限管理(Spring Security + Thymeleaf Security)
- 未登录用户无法发帖
- “版主” 可以看到帖子的置顶和加精按钮并执行相应操作
- “管理员” 可以看到帖子的删除按钮并执行相应操作
- “普通用户” 无法看到帖子的置顶、加精、删除按钮,也无法执行相应操作

- [x] **评论模块**(MySQL)

- [x] 评论模块(MySQL)
- 发布对帖子的评论(过滤敏感词),将其存入 MySQL
- 分页显示评论
- 发布对评论的回复(过滤敏感词)
- 权限管理(Spring Security)
- 未登录用户无法使用评论功能

- [x] **私信模块**(MySQL)

- [x] 私信模块(MySQL)
- 发送私信(过滤敏感词)
- 私信列表
- 查询当前用户的会话列表
Expand All @@ -84,26 +101,34 @@
- 查询某个会话所包含的所有私信
- 访问私信详情时,将显示的私信设为已读状态
- 支持分页显示
- 权限管理(Spring Security)
- 未登录用户无法使用私信功能

- [x] **统一处理异常**(404、500)

- [x] 统一处理异常(404、500)
- 普通请求异常
- 异步请求异常

- [x] 统一记录日志
- [x] **统一记录日志**

- [x] 点赞模块(Redis)
- [x] **点赞模块**(Redis)

- 点赞
- 获赞
- 权限管理(Spring Security)
- 未登录用户无法使用点赞相关功能

- [x] 关注模块(Redis)
- [x] **关注模块**(Redis)

- 关注功能
- 取消关注功能
- 统计用户的关注数和粉丝数
- 关注列表(查询某个用户关注的人),支持分页
- 粉丝列表(查询某个用户的粉丝),支持分页
- 权限管理(Spring Security)
- 未登录用户无法使用关注相关功能

- [x] 系统通知模块(Kafka)
- [x] **系统通知模块**(Kafka)

- 通知列表
- 显示评论、点赞、关注三种类型的通知
Expand All @@ -113,10 +138,11 @@
- 未读数量
- 分别显示每种类型的系统通知的未读数量
- 显示所有系统通知的未读数量
- 导航栏显示所有消息的未读数量(未读私信 + 未读系统通知)
- 权限管理(Spring Security)
- 未登录用户无法使用系统通知功能

- 导航栏显示所有消息的未读数量(未读私信 + 未读系统通知)

- [x] 搜索模块(Elasticsearch + Kafka)
- [x] **搜索模块**(Elasticsearch + Kafka)

- 发布事件
- 发布帖子时,通过消息队列将帖子异步地提交到 Elasticsearch 服务器
Expand All @@ -126,22 +152,31 @@
- 从 Elasticsearch 服务器删除帖子(当帖子从数据库中被删除时)
- 显示搜索结果

- [ ] 权限控制
- [x] **网站数据统计**(管理员专属)

- [ ] 管理员模块
- 置顶帖子
- 加精帖子
- 删除帖子

- [ ] 网站数据统计

- [ ] 热帖排行
- 独立访客 UV
- 存入 Redis 的 HyperLogLog
- 支持单日查询和区间日期查询
- 日活跃用户 DAU
- 存入 Redis 的 Bitmap
- 支持单日查询和区间日期查询
- 权限管理(Spring Security)
- 只有管理员可以查看网站数据统计

- [ ] 文件上传

- [ ] 优化网站性能

## 🎨 界面展示
## 🔐 待实现及优化

- [ ] 修改用户名
- [ ] 查询我的帖子
- [ ] 查询我的评论
- [ ] 查询我的点赞
- [ ] 管理员对帖子的二次点击取消置顶功能
- [ ] 管理员对已删除帖子的恢复功能

## 🎀 界面展示

## 📜 数据库设计

Expand Down Expand Up @@ -205,7 +240,7 @@ CREATE TABLE `comment` (
) ENGINE=InnoDB AUTO_INCREMENT=247 DEFAULT CHARSET=utf8;
```

登录凭证 `login_ticket`
登录凭证 `login_ticket`(废弃,使用 Redis 存储)

```sql
DROP TABLE IF EXISTS `login_ticket`;
Expand Down
4 changes: 2 additions & 2 deletions docs/220-优化登录模块.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

---

## 使用 Redis 存储验证码
## 使用 Redis 短暂存储验证码

- 验证码需要频繁刷新,对性能要求较高
- 验证码不需永久保存(设置在 Cookie 和 Redis 中的保留时间为 60 s)
Expand Down Expand Up @@ -107,7 +107,7 @@ public class RedisKeyUtil {
}
```

LoginTicket 这张表以及相关操作可以废弃了,不过我们最好不要直接就删除了。在 `LoginMapper` 类上面加上 `@Deprecated` 注解表示不推荐使用就好了。
**LoginTicket 这张表以及相关操作可以废弃了**,不过我们最好不要直接就删除了。在 `LoginMapper` 类上面加上 `@Deprecated` 注解表示不推荐使用就好了。

修改 UserService 中生成/修改/查询登录凭证这三个方法

Expand Down
8 changes: 5 additions & 3 deletions docs/240-显示系统通知.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,10 @@ public String getNoticeList(Model model) {

// 查询评论类通知
Message message = messageService.findLatestNotice(user.getId(), TOPIC_COMMNET);
// 封装通知需要用到的数据
Map<String, Object> messageVO = new HashMap<>();
// 封装通知需要的各种数据
if (message != null) {
Map<String, Object> messageVO = new HashMap<>();

messageVO.put("message", message);

String content = HtmlUtils.htmlUnescape(message.getContent());
Expand All @@ -102,8 +103,9 @@ public String getNoticeList(Model model) {

int unread = messageService.findNoticeUnReadCount(user.getId(), TOPIC_COMMNET);
messageVO.put("unread", unread);

model.addAttribute("commentNotice", messageVO);
}
model.addAttribute("commentNotice", messageVO);

// 查询点赞类通知
...........
Expand Down
Loading

0 comments on commit 4083850

Please sign in to comment.