Giter Club home page Giter Club logo

stick-i / scblogs Goto Github PK

View Code? Open in Web Editor NEW
409.0 9.0 97.0 4.18 MB

🎉校园博客,基于微服务架构且前后端分离的博客社区系统。项目后端技术栈:JDK17+SpringBoot + SpringCloud + Mybatis-Plus + Nacos + MySQL + Redis + MQ + ElasticSearch + Docker。前端主要是基于Vue2和ElementUI进行开发的。

Home Page: http://scblogs.cn

License: Other

Java 44.50% JavaScript 1.04% HTML 4.04% Vue 36.69% CSS 13.20% Dockerfile 0.54%
java redis vue spring-cloud docker jwt-token nacos rabbitmq elasticsearch mybatis

scblogs's Introduction

scblogs's People

Contributors

durancer avatar ifyyf avatar kamtuo avatar laity-champion avatar lmliheng avatar pulseum avatar raccoonrock avatar sleeeeeeeping avatar slikangli avatar stick-i avatar wangyu-yyds avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scblogs's Issues

这是一个演示 issue

功能请求 —— The feature request

这是一个演示 issue

建议的解决方案 —— Proposed solution

这是一个演示 issue

附加上下文 —— Additional context

这是一个演示 issue

博客排行榜

功能请求 —— The feature request

实现作者原力排行榜
博客热度排行榜,日、周、月排行榜

解决方案 —— Proposed solution

数据结构的设计:

        _数据库设计_

在 redis 中建立一个 zset 类型的key,其中的每个 member 用 对应排行内容的 ID 充当
Redis根据操作分值数对库中的商品进行排序,并将操作 zset 分值记为热度值或原力值

        _redis key生成方案_

通过获取时间戳,除以每日的单位 1000 * 60 * 60 * 24 得到一个 day key ,积累今日用户操作进行的分值累积
通过算法算出上周的 week key,对上周 day key 进行累积合并操作生成
得到的 day keyweek key 将用来作为排行榜存入redis的 key 后置参数
创建key时,指定 TTL 为 40天,避免垃圾数据占用内存
通过合并操作,来实现周、月排行榜

        _数据生成策略_

用户相关操作使用 rabbitMQ 实现传递事件,在监听类中对涉及到的排行相关信息进行redis操作增加对应涉及的分值操作
时间相关排行榜解决方案:

博客热度排行榜
分数使用用户对该博客的操作数量表示,浏览+1,点赞+3,转发+3,收藏+3,评论+3,热度

作者排行榜
该作者进行发布博客修改博客等活跃操作,或作者所创作博客被点赞,转发,收藏,评论等操作增加 3 原力值

方案优化 —— Optimization

对从redis数据获取来的 id 先进行统计,然后进行 批量查询 提高效率缓解数据库压力

⛑前端项目重构计划⛑

目前的前端代码有些地方写的不太好,代码比较乱,也没有美感,故希望对前端项目代码进行重构!

为了便于前端贡献者参与项目,前端项目已经移植到另一个仓库了。

请有参与项目重构意愿的开发者直接去新仓库围观,同时也可以加入我们的项目总群:729931395。

优化:异常分类和全局异常处理

  1. 异常分类有些混乱,很多无实意的异常,仅仅代表某个服务,比如BlogException、UserException,这样并不好,接收异常的人还是不知道发生了什么。

    应该向NullPointException这样,很明确的指出这是由于空指针引起的。

    普通的业务异常全部使用一个异常类来表示就好了,不需要分服务表示。

  2. 开发者抛出异常前仍然需要打印异常,抛出的异常里其实也有异常信息,可以直接使用,没必要每次都多写。


数据库字段is_deleted属性,去掉前面的is(来自阿里编码规约)

问题 —— The problem

阿里编码规约中提出:【强制】POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。

操作环境 —— Operating environment

环境版本 —— Environment version

latest

重现步骤 —— Steps to reproduce the behavior

No response

截图 —— Screenshots

No response

附加上下文 —— Additional context

No response

网页宽度略宽于浏览器宽度

问题 —— The problem

宽度略宽于浏览器宽度
image
我帮你解决了这个问题, 你不用太感谢我, 我也才花了2分钟而已

操作环境 —— Operating environment

Windows

环境版本 —— Environment version

11

重现步骤 —— Steps to reproduce the behavior

No response

截图 —— Screenshots

image

附加上下文 —— Additional context

No response

数据库表结构优化:添加固定字段,使用逻辑删除

功能请求 —— The feature request

当前所有表的删除都是直接delete进行的,这是一种错误的做法,不利于数据分析以及数据库的运行。

应当使用逻辑删除,给每张表添加固定字段,使用该字段来表示是否被删除。

建议的解决方案 —— Proposed solution

给每张表添加固定字段,创建时间、修改时间、是否删除。

代码层面可以使用mybatis-plus过滤器来进行小幅度的更新。

附加上下文 —— Additional context

No response

md文件新增前端项目相关知识

功能请求 —— The feature request

补充前端知识

建议的解决方案 —— Proposed solution

补充run前端项目相关东西

附加上下文 —— Additional context

No response

这是一个演示Issue

功能请求 —— The feature request

这是一个演示Issue

建议的解决方案 —— Proposed solution

这是一个演示Issue

附加上下文 —— Additional context

这是一个演示Issue

前端用户资料缓存问题

用户更新头像后,主页右上角显示的用户头像仍然是旧的,没有被刷新,重新登录后头像又被更新了。
可能是没有清除缓存重新获取用户头像

回车确认登录、回车确认搜索

您的建议或意见是怎样的?请描述。

Is your feature request related to a problem? Please describe.
可以在登录的地方做一个回车登录的功能,就是我输入完账号密码之后,直接按回车就可以登录了
然后搜索功能也是一样的

描述您想要的解决方案

Describe the solution you'd like
添加按键检测,支持回车确认

附加上下文(有截图更好)

Additional context

使用EditorConfig替换idea代码样式文件

功能请求 —— The feature request

项目目前保持代码样式统一的方式是通过导入idea配置文件来做的,这样不够优雅,我们可以通过idea自带的插件 EditorConfig 来实现,这样会方便且优雅很多。开发者只需要开启一个选项即可保持代码样式一致(默认也是开启的)。

建议的解决方案 —— Proposed solution

使用 EditorConfig,编写该插件的配置文档,并编写操作说明文档。

附加上下文 —— Additional context

No response

更新动态(表白墙)功能

功能请求 —— The feature request

当前表白墙功能完全不可用,尽管后端接口早就有了,但前端已经停滞开发了。

建议的解决方案 —— Proposed solution

简单完善动态功能,至少能用,并根据需要升级后端。

附加上下文 —— Additional context

No response

修复登录时npe、拦截器顺序、关注逻辑

问题 —— The problem

修复登录时npe、拦截器顺序、关注逻辑

操作环境 —— Operating environment

mac

环境版本 —— Environment version

jdk8

重现步骤 —— Steps to reproduce the behavior

No response

截图 —— Screenshots

No response

附加上下文 —— Additional context

No response

让所有服务统一使用ResponseAdvice和ExceptionAdvice来处理返回值和异常

功能请求 —— The feature request

由于项目编码的整体时间跨度较大,导致目前代码风格样式有所差异,有些地方的写法还比较落后

建议的解决方案 —— Proposed solution

统一使用common-web包下的两个advice来处理controller的返回值和异常值,使系统风格统一。

附加上下文 —— Additional context

No response

新增后端服务启动说明

功能请求 —— The feature request

新增后端服务启动说明

建议的解决方案 —— Proposed solution

新增后端服务启动说明,快速启动项目

附加上下文 —— Additional context

No response

所有服务统一使用@Validated来校验参数

功能请求 —— The feature request

目前服务中的参数校验还非常的乱,很多地方是用的ifelse做判断,而且判断的位置也各有差异,有的地方在controller层判断,有的地方在 service层判断。

建议的解决方案 —— Proposed solution

我希望可以统一一下整个服务的参数校验这块,将传入参数用 XXXRequest 类进行封装(当然就一个参数的接口除外),然后用@validated来校验注解,判断条件什么的就用 @NotNull @notempty 等注解去做。

附加上下文 —— Additional context

No response

编写博客时,滚动滑轮,左右两侧滚动不一致

如题。
编写博客的时候,不是有两边吗,左边是md文档编辑的部分,右边是预览的部分。
如果鼠标在左侧滚动,那么右侧也会正常同步滚动。
但是鼠标在右侧滚动的话,左侧是不会同步滚动的。
可以改善优化。

不能更改博客

前端交互:

  1. 不能修改博客内容
  2. 不能删除博客、修改博客状态

md转html应该放在服务端

您的建议或意见是怎样的?请描述。

Is your feature request related to a problem? Please describe.

用户创建博客时,md文档和HTML都是由前端提供,但这样的md转html实际上并不安全,应该放在服务端进行处理。

描述您想要的解决方案

Describe the solution you'd like

取消客户端的md转html操作,改为由服务端进行处理。

附加上下文(有截图更好)

Additional context

最新博客有时候无法刷新出来

该问题的重现步骤是什么?(如果有图片会更好)

What steps will reproduce the problem? (It would be better if there were pictures)

正常进入首页然后点击最新博客列表,偶尔会出现这种情况,显示“抱歉,暂时没有数据”。
大概是这样的,但是F12查看的请求中是请求到接口数据的了。

你期待的结果是什么?实际看到的又是什么?

What is the expected output? What do you see instead?

理论上来说应该是有数据显示的,实际上并未显示数据

你正在使用产品的哪个版本?在什么平台上?

What version of the product are you using? On what platform?

最新版,web端

如果有的话,请在下面提供更多信息。

Please provide any additional information below.

前端不提示错误信息

问题 —— The problem

前端不提示错误信息,后端的接口传过来了错误信息, 但是前端未提示,axios未配置拦截器

操作环境 —— Operating environment

edge

环境版本 —— Environment version

重现步骤 —— Steps to reproduce the behavior

No response

截图 —— Screenshots

No response

附加上下文 —— Additional context

No response

网关服务优化

功能请求 —— The feature request

网关服务需要优化,目前观察到的问题是,当访问的地址不存在时,网关将抛出异常,同时ip限制过滤器将不会生效,因为异常处理器的优先级比全局过滤器优先级要高,所以就不会记录和限制当前访问请求。

建议的解决方案 —— Proposed solution

在异常处理器中手动调用ip限制器。

对访问记录进行持久化保存。

附加上下文 —— Additional context

No response

博客浏览页中的目录问题

您的建议或意见是怎样的?请描述。

Is your feature request related to a problem? Please describe.

浏览博客时,可以看到两处目录。
第一处是在文章内的,点击会直接跳转,直接跳到指定的位置
image

第二处是在文章右侧,点击会缓慢的移动到指定的位置,以固定的速度
image

描述您想要的解决方案

Describe the solution you'd like

两者的移动方式是否可以统一?尤其是第二种方式的移动,如果文章比较长的话,会要移动很久,显得很呆。

这个速度可以根据当前位置到目标位置的距离来进行计算:

  1. 让滚动时间不变
  2. 速度为路程除以时间
  3. 这样速度就是个变速度了,不管到多远的位置,用户都只需要等待很短的时间

然后如果路程是一个比较小的值的话,就可以不用按照上面的规则,保持一个看起来舒服的速度就好了,不然滚动会很慢

附加上下文(有截图更好)

Additional context

搜索界面内容显示异常

该问题的重现步骤是什么?(如果有图片会更好)

What steps will reproduce the problem? (It would be better if there were pictures)

在搜索框搜索测试,第一列内容显示异常
image

你期待的结果是什么?实际看到的又是什么?

What is the expected output? What do you see instead?

期待看到的是没有滑动条的,但实际上第一列有滑动条,并且比例显示也有点异常

你正在使用产品的哪个版本?在什么平台上?

What version of the product are you using? On what platform?

网页端

如果有的话,请在下面提供更多信息。

Please provide any additional information below.

关于微服务识别用户身份的方法问题

现阶段所有服务器(网关除外),识别用户身份都是用的 从Request里获取Header 字段的方法,但这种方法其实不太好,可以改进。

可以单独抽离出一个方法,用于从 Request当中获取用户身份,若获取失败则直接抛出 “用户未登录” 异常即可,当服务需要使用用户信息时,调用该方法获取就好了。

校园博客排行榜前端界面设计

功能请求:
实现用户创作排行榜
博客热度排行榜
当日、七日、月排行榜
解决方法:
1.主要采用vue2来书写界面相关代码
2.利用element-ui对界面进行优化
3.利用axios访问后端接口

注册页面邮箱格式不正确,获取验证码按钮的倒计时还在跑

问题 —— The problem

注册页面邮箱格式不正确,获取验证码按钮的倒计时还在跑
image

操作环境 —— Operating environment

Google Chrome

环境版本 —— Environment version

109.0.5414.119

重现步骤 —— Steps to reproduce the behavior

No response

截图 —— Screenshots

image

附加上下文 —— Additional context

No response

Bug:后端服务构建Docker镜像后时区错误

问题 —— The problem

后端服务构建Docker镜像后时区错误,导致服务系统的时间为UTC时间,这是错误的,与**时间相差八小时。

操作环境 —— Operating environment

环境版本 —— Environment version

latest

重现步骤 —— Steps to reproduce the behavior

No response

截图 —— Screenshots

No response

附加上下文 —— Additional context

No response

org.jetbrains.annotations.NotNull 注解在构建成镜像后失效

问题 —— The problem

服务器上的系统,org.jetbrains.annotations.NotNull注解并没有发挥出它的作用,没有帮我们做参数校验,而本地测试时却正常且有效。

操作环境 —— Operating environment

windows10,IDEA

环境版本 —— Environment version

latest

重现步骤 —— Steps to reproduce the behavior

No response

截图 —— Screenshots

image

附加上下文 —— Additional context

将org.jetbrains.annotations.NotNull替换为javax.validation.constraints.NotNull并在类上配置org.springframework.validation.annotation.Validated注解,或许能解决这个问题。

博客发布功能完善

功能请求 —— The feature request

  1. 博客版权管理,原创、转载等

  2. 博客内容校验和防攻击

  3. markdown转HTML应该写在服务端

建议的解决方案 —— Proposed solution

进行中

附加上下文 —— Additional context

No response

✨项目计划✨

陆续有一些开源贡献者愿意加入到这个项目当中了😁,为了便于大家参与贡献,我将项目计划做了一些整理。

目前想到的一些大的模块和一些小的功能,大家如果有想做的可以在该issue下留言,写下自己想做的任务序号,我会在单独开一个issue然后将任务指定给你。如果有想做的其他功能,但不存在于下面的列表中,也可以留言。

任务列表写的都是些大体的东西,并不详细,需要参与者在准备开发之前先提前规划好。

前端

下面所列举的后端的所有功能,都需要前端的同学进行参与。而且前端比后端有更多的东西需要写,因为原来的开发进度就是后端比前端快的。

不过前端我没学过,所以我也不太了解,现在就很需要前端的同学,最好可以把前端整个架构进行规范化,提供更好的开发体验,毕竟前端的代码写的可能没有后端的那么规范😁😁。

后端

下面是基于一些现有的模块进行开发,因为已经有基本的一些东西了,所以上手会比较容易一些,更适合新人选择

  1. 用户排行榜(基于Redis) #70 @Durancer

    需要做成多个分区,每个高校都是一个区(跟王者的荣耀战区差不多),也需要做全站的排行榜。

    • 创作排行榜

    • 积分排行榜(积分也没做哈哈哈)

    • 活跃排行榜

    • 其他你能想到的

  2. 创作者相关数据,博客相关数据

  3. 博客版权管理,原创、转载等 #100 @sLiKangli

  4. 博客内容校验和防攻击 #100 @sLiKangli

  5. markdown转HTML应该写在服务端 #100 @sLiKangli

  6. 用户个性化设置,博客背景、头像框、代码样式等

  7. 用户认证

下面是完整的模块设计及开发

  1. 管理员系统

    这是个大块,涉及到各方便各模块的东西。

  2. 问答模块

    这个就是类似于CSDN问答模块那样的,用户可以提问,也可以回答别人的问题。

    • 整体架构搭建及功能规划

    • 数据库设计及搭建

    • 相关功能的实现

    • 问答排行榜

  3. 商城模块

    这块我想的是做成那种用户积分兑换社区道具的商城。积分通过任务的形式获取,道具可以是头像框、主页背景、功能性道具等。当然目前只是一个初步的想法,毕竟这个模块是可以做的很大的,而且这些装饰和道具的使用肯定也是需要和其他模块配合实现的,所以这块其实还是牵扯到了很多东西的,需要多人合作。

    • 整体架构搭建及功能规划

    • 数据库设计及搭建

    • 用户积分系统(这个应该实现在用户模块里)

    • 道具设计及实现

    • 还有商城系统这块很多功能的实现

  4. OJ模块

    诶,这作为一个学习社区,怎么能不幻想有一个OJ模块呢是吧🤣(毕竟CSDN也有)。

    这块的话就跟其他在线OJ平台差不多吧,有题目,然后可以写代码,可以编译,提交运行。说实话这块我是没接触过的,完全一点都不会的那种,所以也只能拜托各位大佬啦🤝。

  5. 监控平台

    突然想到我们也还缺少一个监控平台,毕竟微服务这东西,服务数量一旦多起来,人工检测和维护就比较困难了,所以一个好的监控平台也是很有必要的!

    关于这一块的开发,我个人的看法是,基于一个现有的监控平台进行二次开发,这样既可以省去大量造轮子的时间,也可以学习到很多东西。当然,刚开始先直接引入一个现有的监控平台也是完全没有问题的,毕竟二次开发这事,也不简单👴。

这份文档我也会一直维护下去,有新的功能或者进度会在上更新,期待各位同学朋友的加入🧐🧐!

博客攻击拦截

若用户提交的博客内含有相关的攻击链接,理应进行拦截,像此类问题应该在前后端都进行检测

  • 图片链接转本站链接或放行特定域名的链接,防止跨站点伪造请求

还有别的需要处理的内容吗?欢迎各位进行补充

首页推荐博客格子大小不一致

该问题的重现步骤是什么?(如果有图片会更好)
What steps will reproduce the problem? (It would be better if there were pictures)
进入首页就可以很容易的看到
image

你期待的结果是什么?实际看到的又是什么?
What is the expected output? What do you see instead?
每一条博客所占用的页面高度应该是一致的,但事实上他们由于描述的内容长度不同而被迫改变了大小

你正在使用产品的哪个版本?在什么平台上?
What version of the product are you using? On what platform?
网页上

如果有的话,请在下面提供更多信息。
Please provide any additional information below.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.