1.app端登录功能
整体思路与admin微服务登录和wemedia微服务登录相差不多,唯一需要注意的是
实现思路:
1. 在默认频道展示10条文章信息
1. 可以切换频道查看不同种类文章
1. 当用户上拉可以加载更多的文章信息(按照发布时间)
1. 分页
1. 根据前端传递过来的最小时间(即最后一条文章的发布时间)去数据库查询更早的文章返回前端显示
4. 当用户下拉可以加载最新的文章
1. 分页
1. 根据前端传递过来的最大时间(即第一条一条文章的发布时间)去数据库查询更晚的文章返回前端显示
3.文章详情页面静态化
所用技术亮点: minio 因为页面消息访问量大,如果每次都去数据库查询,严重影响效率,所以为了解决这个问题,引入了页面静态化的技术,我们项目使用的开源的minIO,类似OSS的分布式文件存储服务器
实现思路:
1. 首先修改文章对应的表,增加一个字段,用来存储minIO中页面的路径
1. 获取模板
1. 准备数据
//3. 用数据替换模板,输出到指定的输出流中
StringWriter stringWriter = new StringWriter();
template.process(map,stringWriter);
String contentHtml = stringWriter.toString();
// 4. 将静态也 上传到minIO中 静态页名称: articleId + .html
String store = minIOFileStorageService.store(prefix,
apArticle.getId() + ".html",
"text/html",
new ByteArrayInputStream(contentHtml.getBytes())
);
4. 用数据替换模板,输出到指定的输出流中
4. 将静态也 上传到minIO中 静态页名称: articleId + .html
4. 将minio中静态页面的路径 设置到 article表的static_url属性上
4. 在发布文章时,和app端加载文章列表时也要把static_url的路径补全
4.app端-关注作者或取消关注
所用技术亮点: Redis
- 由于业务需求,如果使用mysql数据库保存两者的关系,需要频繁的对该表CRUD降低了效率,所以我们采用Redis进行存储该数据
设计思路:
从用户的角度出发:一个用户可以关注其他多个作者 —— 我的关注
从作者的角度出发:一个用户(同是作者)也可以拥有很多个粉丝 —— 我的粉丝
数据之间一对多所以采用集合方式,关注时间要有序,所以要选用有序的集合,数据需要不重复,所以满足所有需求的集合为ZSET
示例: 当一号用户关注了二号关注,就在follow表中加一条数据
同时一号用户也成为了二号用户的粉丝,要在fans表中添加一条数据
ZADD follow:1 time(时间戳) 2
ZADD fans:2 time(时间戳) 1
实现思路:
1. 参数校验
1. 自己不能关注自己
1. 判断operation的值是否等于0(关注)
1. 满足 如果是0 关注该作者 ZADD 集合添加数据
1. 不满足 如果是1 取消关注该作者 ZREM 集合删除数据