1.实战说明
1.1.实战安排
此次实战为分组实战,按组完成所有的需求即可,共分为两天完成
1.2.需求说明
此次实战共分为三部分,详细查看需求文件夹,里面包含了所有的需求说明和接口文档
- 01-文章评论[实战]-->使用mongodb进行存储
- 02-自媒体评论管理[实战]-->使用mongodb进行存储
- 03-自媒体图文统计[实战]
1.3.资料说明
1.此次实战主要针对是app端和自媒体端,里面会涉及到一些表,都可以在资料中直接找到
2.自媒体前端项目需要替换之前的项目,可以在资料中找到
3.尤其注意事项:在新的自媒体前端项目中,前端传参数的时候,有的是使用了get请求传递了多个参数,需要重新配置nginx获得到get请求中的路径上的参数
配置如下:heima-leadnews-wemedia.conf
upstream heima-wemedia-gateway{
server localhost:51602;
}
server {
listen 8802;
location / {
root D:/workspace/wemedia-web-v2/;
index index.html;
}
location ~/wemedia/MEDIA/(.*) {
proxy_pass http://heima-wemedia-gateway/$1?$args; #后端服务可以接收get请求路径上的参数
proxy_set_header HOST $host; # 不改变源请求头的值
proxy_pass_request_body on; #开启获取请求体
proxy_pass_request_headers on; #开启获取请求头
proxy_set_header X-Real-IP $remote_addr; # 记录真实发出请求的客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #记录代理信息
}
}
2.文章评论
需要新创建模板完成评论功能heima-leadnews-comment
评论的所有数据都保存在mongodb中
2.1 文章评论
2.1.1.发布评论
- 在文章详情中发表评论,输入内容发表评论
- 必须登录后才能发表评论
- 评论内容不能超过140字
- 评论内容需要做文本垃圾检测
2.1.2 点赞
用户点赞,可以增加点赞数量,点赞后不仅仅要增加点赞数,需要记录当前用户对于当前评论的数据记录
用户取消点赞,点赞减一,更新点赞数据
2.1.3 评论列表
展示评论内容、评论的作者、点赞数、回复数、时间
- 查询评论列表,根据当前文章进行检索,按照创建时间倒序,分页查询(默认10条数据)
- 在结果返回中,如果当天登录人点赞了某条评论,需要高亮展示“点赞按钮”
2.2.评论回复
2.2.1.评论回复-发布
- 需求与发表评论一致
- 保存成功后需要更新评论的回复数量
2.2.2.点赞
需求与评论的点赞一致
2.2.3 查询评论回复列表
需求与评论的列表查看一致
文章评论-接口文档
1 评论
1.1 保存评论
接口地址:/api/v1/comment/save
请求方式:POST
请求数据类型:application/json
响应数据类型:*/*
接口描述:
请求示例:
{
"articleId": 0,
"content": ""
}
请求参数:
参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
---|---|---|---|---|---|
dto | dto | body | true | CommentSaveDto | CommentSaveDto |
articleId | 文章id | false | long | ||
content | 评论内容 | false | string |
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | ResponseResult |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 | schema |
---|---|---|---|
code | integer(int32) | integer(int32) | |
data | object | ||
errorMessage | string | ||
host | string |
响应示例:
{
"code": 0,
"data": {},
"errorMessage": "",
"host": ""
}
1.2 查询评论列表
接口地址:/api/v1/comment/load
请求方式:POST
请求数据类型:application/json
响应数据类型:*/*
接口描述:
请求示例:
{
"articleId": 0,
"index": 0,
"minDate": ""
}
请求参数:
参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
---|---|---|---|---|---|
dto | dto | body | true | CommentDto | CommentDto |
articleId | 文章id | false | long | ||
minDate | 分页条件 最小时间 | false | date |
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | ResponseResult |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 | schema |
---|---|---|---|
code | integer(int32) | integer(int32) | |
data | object | ||
errorMessage | string | ||
host | string |
在返回的评论列表中,需要包含一个字段operation,如果为0,则表示当前登录用户点赞了评论,如果为null,则没有点赞
响应示例:
{
"host":null,
"code":0,
"errorMessage":"操作成功",
"data":[
{
"id":"610104c706a0020006fedd6c",
"authorId":4,
"authorName":"admin",
"entryId":1413441424799698946,
"channelId":null,
"type":0,
"content":"写得不错",
"image":null,
"likes":1,
"reply":0,
"flag":0,
"longitude":null,
"latitude":null,
"address":null,
"ord":null,
"createdTime":1627456711549,
"updatedTime":null,
"operation":0
},
{
"id":"610104bf06a0020006fedd6b",
"authorId":4,
"authorName":"admin",
"entryId":1413441424799698946,
"channelId":null,
"type":0,
"content":"好文章",
"image":null,
"likes":0,
"reply":0,
"flag":0,
"longitude":null,
"latitude":null,
"address":null,
"ord":null,
"createdTime":1627456703366,
"updatedTime":null,
"operation":null
}
]
}
1.3 点赞
接口地址:/api/v1/comment/like
请求方式:POST
请求数据类型:application/json
响应数据类型:*/*
接口描述:
请求示例:
{
"commentId": "",
"operation": 0
}
请求参数:
参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
---|---|---|---|---|---|
dto | dto | body | true | CommentLikeDto | CommentLikeDto |
commentId | 评论id | false | string | ||
operation | 0:点赞 1:取消点赞 | false | short |
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | ResponseResult |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 | schema |
---|---|---|---|
code | integer(int32) | integer(int32) | |
data | object | ||
errorMessage | string | ||
host | string |
响应示例:
{
"host":null,
"code":0,
"errorMessage":"操作成功",
"data":{
"likes":88
}
}
2 评论回复
2.1 保存
接口地址:/api/v1/comment_repay/save
请求方式:POST
请求数据类型:application/json
响应数据类型:*/*
接口描述:
请求示例:
{
"commentId": "",
"content": ""
}
请求参数:
参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
---|---|---|---|---|---|
dto | dto | body | true | CommentRepaySaveDto | CommentRepaySaveDto |
commentId | 评论id | false | string | ||
content | 评论内容 | false | string |
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | ResponseResult |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 | schema |
---|---|---|---|
code | integer(int32) | integer(int32) | |
data | object | ||
errorMessage | string | ||
host | string |
响应示例:
{
"code": 0,
"data": {},
"errorMessage": "",
"host": ""
}
2.2 查询评论回复列表
接口地址:/api/v1/comment_repay/load
请求方式:POST
请求数据类型:application/json
响应数据类型:*/*
接口描述:
请求示例:
{
"commentId": "",
"minDate": "",
"size": 0
}
请求参数:
参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
---|---|---|---|---|---|
dto | dto | body | true | CommentRepayDto | CommentRepayDto |
commentId | 评论id | false | string | ||
minDate | 列表中的最小时间 | false | date | ||
size | 分页条数 | false | int |
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | ResponseResult |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 | schema |
---|---|---|---|
code | integer(int32) | integer(int32) | |
data | object | ||
errorMessage | string | ||
host | string |
在返回的评论回复列表中,需要包含一个字段operation,如果为0,则表示当前登录用户点赞了评论,如果为null,则没有点赞
响应示例:
{
"code": 0,
"data": {},
"errorMessage": "",
"host": ""
}
2.3 点赞
接口地址:/api/v1/comment_repay/like
请求方式:POST
请求数据类型:application/json
响应数据类型:*/*
接口描述:
请求示例:
{
"commentRepayId": "",
"operation": 0
}
请求参数:
参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
---|---|---|---|---|---|
dto | dto | body | true | CommentRepayLikeDto | CommentRepayLikeDto |
commentRepayId | 评论回复id | false | string | ||
operation | 0:点赞 1:取消点赞 | false | short |
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | ResponseResult |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 | schema |
---|---|---|---|
code | integer(int32) | integer(int32) | |
data | object | ||
errorMessage | string | ||
host | string |
响应示例:
{
"host":null,
"code":0,
"errorMessage":"操作成功",
"data":{
"likes":88
}
}
自媒体评论管理-需求说明
1)评论管理查询
- 按照时间倒序查询发布的文章
- 展示文章标题 评论状态 评论总量
- 分页可以查询
- 可以按照时间范围查询
2)打开或关闭评论
- 打开评论,可以让任何用户评论该文章
- 关闭评论,不让任何用户评论该文章,关闭评论,则清除所有该文章的评论
3)查看文章评论详情
点击查看按钮即可查看文章评论的详细内容
- 展示文章的评论
- 展示评论的对应回复列表
4)作者回复评论
作者可以对某一条评论进行回复
5)作者点赞评论
- 作者可以点赞评论,点赞后点赞数+1
6)作者可以删除评论
7 删除评论回复
8 注意
以上功能都要先过自媒体微服务
自媒体评论管理-接口说明
1.删除评论
基本信息
Path: /wemedia/api/v1/comment/manage/del_comment/
Method: DELETE
接口描述:
请求参数
Headers
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | ||
路径参数 |
| 参数名称 | 示例 | 备注 | | ------------ | ------------ | ------------ | ------------ | ------------ | | commentId | | 评论id | Body
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
host | null | 非必须 | |||
code | integer | 非必须 | 最大值: 200 最小值: 200 | ||
errorMessage | string | 非必须 | 枚举: 操作成功 | ||
data | string | 非必须 | 枚举: SUCCESS |
2.删除评论回复
基本信息
Path:/api/v1/comment/manage/del_comment_repay/
Method: DELETE
接口描述:
请求参数
Headers
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | ||
路径参数 |
| 参数名称 | 示例 | 备注 | | ------------ | ------------ | ------------ | ------------ | ------------ | | commentRepayId | | 评论回复id |
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
host | null | 非必须 | |||
code | number | 非必须 | |||
errorMessage | string | 非必须 | |||
data | string | 非必须 |
3.回复评论
基本信息
Path: /api/v1/comment/manage/comment_repay
Method: POST
接口描述:
请求参数
Headers
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | ||
Body |
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
commentId | string | 非必须 | 评论id | ||
content | string | 非必须 | 评论内容 |
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
code | number | 非必须 | 最大值: 200 最小值: 200 | ||
data | object | 非必须 | |||
errorMessage | string | 非必须 | 枚举: 操作成功 | ||
host | string | 非必须 |
4.打开或关闭评论
基本信息
Path: /api/v1/comment/manage/update_comment_status
Method: POST
接口描述:
请求参数
Headers
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | ||
Body |
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
articleId | integer | 非必须 | 文章id | ||
operation | integer | 非必须 | 0 关闭评论 1 开启评论 |
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
host | null | 非必须 | |||
code | number | 非必须 | 最大值: 200 最小值: 200 | ||
errorMessage | string | 非必须 | 枚举: 操作成功 | ||
data | string | 非必须 |
5.查看评论列表
基本信息
Path: /api/v1/comment/manage/find_news_comments
Method: POST
接口描述:
请求参数
Headers
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | ||
Body |
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
beginDate | string | 非必须 | 开始时间 | ||
endDate | string | 非必须 | 结束时间 | ||
page | number | 非必须 | 当前页 | ||
size | number | 非必须 | 每页显示条数 |
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
code | integer | 必须 | 最大值: 200 最小值: 200 | ||
currentPage | integer | 必须 | 最大值: 1 最小值: 1 | ||
data | object [] | 必须 | 最小数量: 10 元素是否都不同: true 最大数量: 10 item 类型: object | ||
├─ id | string | 必须 | 文章id | 枚举: 1302862387124125698,1302864436297482242 | |
├─ title | string | 必须 | 文章名称 | 枚举: 什么是Java语言,Java语言跨平台原理,项目管理感悟,北大创业人:“理想”的喧哗与骚动,没想到,拼多多竟然想用AI种草莓给我吃,英特尔是如何丢掉苹果生意的?,“鹰翼门”关不上,“幽灵刹车”事件不断,特斯拉…,微软及时选择“站队”,或拯救了折叠屏手机的未… | |
├─ comments | integer | 必须 | 评论总量 | 最大值: 9999 最小值: 1000 | |
├─ isComment | boolean | 必须 | 评论状态 | ||
├─ createdTime | integer | 必须 | 创建时间 | 最大值: 1623224026546 最小值: 1623224026546 | |
errorMessage | string | 必须 | 枚举: 操作成功 | ||
host | string | 必须 | |||
size | integer | 必须 | 最大值: 10 最小值: 10 | ||
total | integer | 必须 | 最大值: 100 最小值: 100 |
6.查看评论列表
基本信息
Path: /api/v1/comment/manage/list
Method: POST
接口描述:
请求参数
Headers
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | ||
Body |
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
articleId | number | 非必须 | 文章id | ||
page | number | 非必须 | 当前页 | ||
size | number | 非必须 | 每页显示条数 |
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
host | null | 必须 | |||
code | number | 必须 | 最大值: 200 最小值: 200 | ||
errorMessage | string | 必须 | 枚举: 操作成功 | ||
data | object [] | 必须 | 最小数量: 10 元素是否都不同: true 最大数量: 10 item 类型: object | ||
├─ apComments | object | 必须 | |||
├─ id | string | 必须 | 枚举: 60c06eda4e71825b1b14f0f7 | ||
├─ authorId | number | 必须 | |||
├─ authorName | string | 必须 | 枚举: 覃妹艺,飞翔的大象,白一捧 | ||
├─ entryId | number | 必须 | |||
├─ channelId | null | 必须 | |||
├─ type | number | 必须 | |||
├─ content | string | 必须 | 枚举: 电商已经把实体门店挤兑得不行了,现在又来了个社区团购,又会有一大批社会底层人员失业…,唉,社区团购虽然说是时代潮流产物,但是对原本的实体经济体制破坏太大了,很多独立小商家以为扩大了顾客群体,但是实际却被割了韭菜,平台永远不会亏钱的,利益受害的只会是商家,是的受伤的不仅是商家,一旦平台获得话语权。菜农商家消费者都是菜板上的肉等着被宰。充电宝,滴滴打车就是前车之鉴啊!市场需要合理的监管了。不能再等了。好多小商贩,就是好多个嗷嗷待哺的家,。社区团购干掉这样的“中间商”干嘛呢?你让底层人民怎么活? | ||
├─ image | null | 必须 | |||
├─ likes | integer | 必须 | 最大值: 10 最小值: 0 | ||
├─ reply | integer | 必须 | 最大值: 10 最小值: 0 | ||
├─ flag | integer | 必须 | |||
├─ ord | null | 必须 | |||
├─ createdTime | integer | 必须 | 最大值: 1623224026546 最小值: 1623224026546 | ||
├─ updatedTime | null | 必须 | |||
├─ status | null | 必须 | |||
├─ operation | integer | 必须 | 0:点赞 1:取消点赞 | 最大值: 1 最小值: 1 | |
├─ apCommentRepays | object [] | 必须 | item 类型: object | ||
├─ id | string | 必须 | 枚举: 60c2052bddf781003cc72e67 | ||
├─ authorId | number | 必须 | |||
├─ authorName | string | 必须 | 枚举: 我的地盘,你在教我做事啊,我的地盘,白一捧 | ||
├─ commentId | string | 必须 | |||
├─ content | string | 必须 | 枚举: 胡说八道,小商户一年一两万的房租跟十来万的毛利相比不值一提,无秩序无规则的电商经济才是打垮实体经济的罪魁祸首,社会底层人生与死对人类发展对我国发展的作用很低,社区团购也是把他们那份收入剥夺拿去发展高科技,其实大方向是对的,就像人类吃排骨不会担心猪会疼一个道理,胡说八道,小商户一年一两万的房租跟十来万的毛利相比不值一提,无秩序无规则的电商经济才是打垮实体经济的罪魁祸首,一家之言,仅供参考,不要人身攻击 | ||
├─ likes | number | 必须 | |||
├─ createdTime | integer | 必须 | 最大值: 1623328043049 最小值: 1623328043049 | ||
├─ updatedTime | number | 必须 |
7.评论点赞
基本信息
Path:/api/v1/comment/manage/like
Method: POST
接口描述:
请求参数
Headers
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | ||
Body |
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
commentId | string | 非必须 | 评论id | ||
operation | number | 非必须 | 0:点赞 1:取消点赞 |
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
code | number | 非必须 | 最大值: 200 最小值: 200 | ||
data | object | 非必须 | |||
├─ likes | integer | 非必须 | 最大值: 100 最小值: 0 | ||
errorMessage | string | 非必须 | 枚举: 操作成功 | ||
host | string | 非必须 |
自媒体图文数据统计-需求说明
如上图所示:
自媒体人登录到自媒体系统后可以查看最近的统计报表
- 当前登录的用户可以选择指定时间查看文章的一些统计(图片发布量、文章点赞量、文章收藏量、文章点赞量)
- 分页展示文章列表,展示当前时间范围内的具体文章阅读、评论、收藏的数量。
自媒体图文统计-接口文档
需要在自媒体微服务定义接口
newsDimension
接口地址:/api/v1/statistics/newsDimension
请求方式:GET
请求数据类型:*
响应数据类型:*/*
接口描述:
请求参数:
参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
---|---|---|---|---|---|
beginDate | 开始时间 | query | false | string | |
endDate | 结束时间 | query | false | string |
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | ResponseResult |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 | schema |
---|---|---|---|
code | integer(int32) | integer(int32) | |
data | object | ||
errorMessage | string | ||
host | string |
响应示例:
{
"host":null,
"code":200,
"errorMessage":"操作成功",
"data":{
"likesNum":104,
"collectNum":814,
"publishNum":13
}
}
newsPage
接口地址:/api/v1/statistics/newsPage
请求方式:GET
请求数据类型:*
响应数据类型:*/*
接口描述:
请求参数:
参数名称 | 参数说明 | in | 是否必须 | 数据类型 | schema |
---|---|---|---|---|---|
beginDate | 开始时间 | query | false | string | |
endDate | 结束时间 | query | false | string | |
page | 当前页 | query | false | integer(int32) | |
size | 每页大小 | query | false | integer(int32) |
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | ResponseResult |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 | schema |
---|---|---|---|
code | integer(int32) | integer(int32) | |
data | object | ||
errorMessage | string | ||
host | string |
响应示例:
{
"host":null,
"code":200,
"errorMessage":null,
"data":[
{
"id":"1428570910251683841",
"title":"一百多年前美国蝗灾有多恐怖?用了四十年才解决这个难题",
"likes":11,
"collection":22,
"comment":22,
"views":22
},
{
"id":"1428567583451385857",
"title":"靠发“战争财”的罗斯柴尔德家族,鸦片战争他们也是幕后推手",
"likes":33,
"collection":66,
"comment":66,
"views":8888
}
],
"currentPage":1,
"size":10,
"total":13
}