找回密码
 立即注册
查看: 243|回复: 0

复现-新闻发布-项目

[复制链接]
发表于 2023-3-5 07:54 | 显示全部楼层 |阅读模式
提要


如题,之前做过“新闻发布”这个项目,这里讲一下复现

之前文章如下

https://wnhyang.gitee.io/article/48213f39.html

https://wnhyang.gitee.io/article/54805cfd.html
之前也说过我的一些设计是参考简书的,所以下面展示的也是很像
开始


一个简易的新闻发布系统,前台可实现,新闻的在线编辑(富文本编辑器实现),查看新闻,评论新闻,问题反馈,个人信息修改等功能,后台就是实现包括用户、新闻分类、新闻信息、评论等管理

首页参考下图

[图片上传失败...(image-92f3ff-1648794005365)]

反馈参考下图

[图片上传失败...(image-ae9dec-1648794005366)]
架构图


[图片上传失败...(image-43f710-1648794005366)]
数据库设计

CREATE TABLE `user` (    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `user_name` VARCHAR ( 20 ) NOT NULL DEFAULT '' COMMENT '用户名',    `password` VARCHAR ( 100 ) NOT NULL DEFAULT '123456' COMMENT '密码',    `email` VARCHAR ( 30 ) NOT NULL DEFAULT '' COMMENT '邮箱',    `user_type` TINYINT ( 4 ) NOT NULL DEFAULT '0' COMMENT '用户类型(0:普通用户,1:媒体人,2:管理员)',    `phone` VARCHAR ( 50 ) NOT NULL DEFAULT '' COMMENT '手机号',    `show_phone` TINYINT ( 1 ) NOT NULL DEFAULT '0' COMMENT '是否展示手机号(0:是,1否)',    `sign` VARCHAR ( 30 ) NOT NULL DEFAULT '' COMMENT '签名',    `intro` VARCHAR ( 100 ) NOT NULL DEFAULT '' COMMENT '介绍',    `valid` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1有效)',    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    PRIMARY KEY ( `id` ),    UNIQUE KEY `idx_user_name` ( `user_name` ),    UNIQUE KEY `idx_email` ( `email` ),    KEY `idx_update_time` ( `update_time` ) ) ENGINE = INNODB AUTO_INCREMENT = 20 DEFAULT CHARSET = utf8mb4 COMMENT = '新闻用户表';CREATE TABLE `user_cert` (    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `user_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '用户id',    `cert_info` VARCHAR ( 50 ) NOT NULL DEFAULT '' COMMENT '认证信息',    `cert_material` VARCHAR ( 255 ) NOT NULL DEFAULT '' COMMENT '认证材料',    `state` TINYINT ( 4 ) NOT NULL DEFAULT '0' COMMENT '认证状态(0:待审核,1:通过,2:未通过)',    `remark` VARCHAR ( 50 ) NOT NULL DEFAULT '' COMMENT '备注',    `valid` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1有效)',    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    PRIMARY KEY ( `id` ),    KEY `idx_update_time` ( `update_time` ),    KEY `idx_user_id` ( `user_id` ) ) ENGINE = INNODB AUTO_INCREMENT = 12 DEFAULT CHARSET = utf8mb4 COMMENT = '用户认证表';CREATE TABLE `news` (    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `category_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '新闻分类id',    `user_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '作者id',    `title` VARCHAR ( 50 ) NOT NULL DEFAULT '' COMMENT '新闻标题',    `summary` VARCHAR ( 30 ) NOT NULL DEFAULT '' COMMENT '新闻摘要',    `content` VARCHAR ( 1000 ) NOT NULL DEFAULT '' COMMENT '新闻内容',    `state` TINYINT ( 4 ) NOT NULL DEFAULT '0' COMMENT '新闻状态(0:未操作,草稿状态,1:等待,2:通过,3:不通过)',    `remark` VARCHAR ( 50 ) NOT NULL DEFAULT '' COMMENT '备注',    `comment_count` INT ( 10 ) NOT NULL DEFAULT '0' COMMENT '评论数,只计算一级评论',    `star_count` INT ( 10 ) NOT NULL DEFAULT '0' COMMENT '收藏数',    `like_count` INT ( 10 ) NOT NULL DEFAULT '0' COMMENT '喜欢数',    `valid` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1有效)',    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    PRIMARY KEY ( `id` ),    KEY `idx_news_title` ( `title` ),    KEY `idx_update_time` ( `update_time` ),    KEY `idx_user_id` ( `user_id` ),    KEY `idx_category_id` ( `category_id` ) ) ENGINE = INNODB AUTO_INCREMENT = 32 DEFAULT CHARSET = utf8mb4 COMMENT = '新闻表';CREATE TABLE `news_category` (    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `category_name` VARCHAR ( 10 ) NOT NULL DEFAULT '' COMMENT '新闻分类名',    `valid` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1有效)',    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    PRIMARY KEY ( `id` ),    KEY `idx_update_time` ( `update_time` ) ) ENGINE = INNODB AUTO_INCREMENT = 23 DEFAULT CHARSET = utf8mb4 COMMENT = '新闻分类表';CREATE TABLE `news_comment` (    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `news_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '新闻id',    `user_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '作者id',    `parent_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '父评论id',    `is_top` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否一级评论,只有两级评论',    `content` VARCHAR ( 100 ) NOT NULL DEFAULT '' COMMENT '评论内容',    `valid` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1有效)',    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    PRIMARY KEY ( `id` ),    KEY `idx_update_time` ( `update_time` ),    KEY `idx_news_id` ( `news_id` ) ) ENGINE = INNODB AUTO_INCREMENT = 20 DEFAULT CHARSET = utf8mb4 COMMENT = '新闻评论表';CREATE TABLE `user_like_news` (    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `news_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '新闻id',    `user_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '用户id',    `valid` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1有效)',    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    PRIMARY KEY ( `id` ),    KEY `idx_update_time` ( `update_time` ),    KEY `idx_user_id` ( `user_id` ),    KEY `idx_news_id` ( `news_id` ) ) ENGINE = INNODB AUTO_INCREMENT = 25 DEFAULT CHARSET = utf8mb4 COMMENT = '用户喜欢新闻表';CREATE TABLE `user_star_news` (    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `news_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '新闻id',    `user_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '用户id',    `valid` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1有效)',    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    PRIMARY KEY ( `id` ),    KEY `idx_update_time` ( `update_time` ),    KEY `idx_user_id` ( `user_id` ),    KEY `idx_news_id` ( `news_id` ) ) ENGINE = INNODB AUTO_INCREMENT = 14 DEFAULT CHARSET = utf8mb4 COMMENT = '用户收藏新闻表';CREATE TABLE `feedback` (    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `user_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '反馈人id',    `type_id` BIGINT ( 20 ) NOT NULL DEFAULT '-1' COMMENT '反馈类型id',    `content` VARCHAR ( 100 ) NOT NULL DEFAULT '' COMMENT '反馈内容',    `state` TINYINT ( 1 ) NOT NULL DEFAULT '0' COMMENT '反馈状态(0:未处理,1:处理)',    `remark` VARCHAR ( 50 ) NOT NULL DEFAULT '' COMMENT '备注',    `valid` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1有效)',    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    PRIMARY KEY ( `id` ),    KEY `idx_update_time` ( `update_time` ),    KEY `idx_user_id` ( `user_id` ),    KEY `idx_type_id` ( `type_id` ) ) ENGINE = INNODB AUTO_INCREMENT = 9 DEFAULT CHARSET = utf8mb4 COMMENT = '反馈表';CREATE TABLE `feedback_type` (    `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键id',    `type_name` VARCHAR ( 20 ) NOT NULL DEFAULT '' COMMENT '反馈类型名',    `valid` TINYINT ( 1 ) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1有效)',    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    PRIMARY KEY ( `id` ),KEY `idx_update_time` ( `update_time` ) ) ENGINE = INNODB AUTO_INCREMENT = 21 DEFAULT CHARSET = utf8mb4 COMMENT = '反馈类型表';接口设计

操作人主要接口说明
管理员对几乎所有内容的管理

用户认证审核
用户管理
新闻分类管理
新闻审核
新闻管理
新闻评论管理
反馈管理 | /user/info/(list/update/add/delete)
/user/cert/(list/update/delete)
/news/category/(list/update/add/delete)
/news/info/(list/update/add/delete)
/comment/info/list
/comment/delete
/feedback/type/(list/update/add/delete)
/feedback/info/(list/update/delete) | 就正常管理界面 |
| 媒体人 | 新闻来源
需要通过认证审核可发新闻(可限制时间,一段时间后还需认证)
个人新闻增删改
个人信息修改提交认证
查看新闻
喜欢收藏新闻
评论新闻
反馈 | /news/add
/news/delete
/news/{userId}/news
/news/{userId}/content
/news/{userId}/submit
/news/{userId}/cancel | 编辑界面参考如下在此可看到自己所有新闻(所有状态),可编辑修改
[图片上传失败...(image-768a63-1648794005366)]
[图片上传失败...(image-ee54cb-1648794005366)]
[图片上传失败...(image-374743-1648794005366)] |
| 一般用户 | 普通用户
个人信息修改
提交认证,通过认证可变为媒体人
查看新闻
喜欢收藏新闻
评论新闻
反馈 | /news/{newsId}/comment
/news/{newsId}/star
/news/{newsId}/like
/news/{newsId}/unlike
/user/update
/user/delete
/user/cert/add
/user/{userId}/cert
/feedback/all
/feedback/add
/user/{userId}/feedback | 个人主页参考如下展示基本个人信息同时,显示已过审核新闻,喜欢收藏新闻
[图片上传失败...(image-d9c492-1648794005366)] |
| 游客 | 查看新闻 | /news/{newsId}
/comment/list
/user/{userId}
/user/{userId}/like
/user/like/list
/user/{userId}/star
/user/star/list
/news/category/all
/{cId} | 查看新闻参考如下显示新闻标题、内容、分类、评论、推荐新闻等
[图片上传失败...(image-ea12f-1648794005366)] |
新闻状态转换图


[图片上传失败...(image-c4ef90-1648794005366)]
部分数据流转图


[图片上传失败...(image-4f3f1b-1648794005366)]
缓存设计


新闻点赞缓存设计

https://wnhyang.gitee.io/article/1e9afcf1.html

新闻分类名和反馈类型名转为JSON字符串存储,因为这部分只由管理员修改,而且几乎不变,所以没有设置过期时间,并在修改时删除缓存,以做到数据一致

单个新闻分类名、单个反馈类型名、用户名、新闻标题、用户邮箱存对应字符串,有过期时间,也会在删除修改时删除缓存
没做的


新闻评论数、点击量的缓存hash

每个用户的新闻列表缓存set/zset

新闻简单信息缓存hash

热门新闻内容缓存hash

推荐列表list

收藏夹set/zset

新闻总热榜,分类热榜set/zset
总结

问题/需要改进


评论关联其他评论(一级评论或回复之间的),数据库需要再设计,删除需要重新考虑逻辑

在扩展功能时要考虑数据库表是否需要重新设计

简单的关联表(两个id组成的),可以省去关联表的id,由关联的两个id组成复合主键
展望


    用户权限,可使用SpringSecurity等安全框架,同时对敏感信息加密存储

    单个服务过大时,考虑拆分服务

    分布式场景考虑,事务问题,定时任务同样也要考虑分布式下的问题

    加入ES优化查询

    数据表结构,索引优化
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 03:38 , Processed in 0.063873 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表