Werun后端23级纳新第三次作业

主要作者:刘硕

我负责了本次作业的相关补充和略微修改。

发布于 2024.2.10

1.写在前面

今天(2.10)正是春节,首先祝大家新年快乐!!!

经过了一学期的大学生活,相信大家都逐渐适应了大学生活的节奏。2023对大家来说是不平凡的一年,经历了高考,来到了我v,或许你满怀喜悦,或许你心有不甘,但ldx想说的是一切都已经成为过去式(好土),少年不应踌躇于过去,少年的目光应该望向前方,未来你会有无数可以大展身手的机会(请相信你v,也请更相信你自己),2024将会是大家飞速成长的见证之年,我想把我很喜欢的一句诗送给大家:

“须知少时凌云志,曾许人间第一流”,希望大家在新的一年满怀希望,勇往直前!

相信大家经历了一次Java作业和一次springboot作业的考验,对Java和项目有了较深的了解,下面我们将迎来最后一次大作业。

2.作业介绍

2.1 概述

本次作业是接着第二阶段的朝辞项目深入完善。二阶段大家完成了框架的搭建和用户注册登录模块的编写,本阶段来具体实现朝辞的功能。

朝辞,相互之间写信的软件,当你知道对方的uid时,就可以写信给他。你也可以回信。 不需要有录入手写文字的功能,都是纯文本最多配点图,然后需要能够管理你的信箱,可以新建分类,可以延时发送消息。

2.2 功能点

大家需要仔细思考这些业务需要实现多少接口,需要设计什么样的数据库表以及表中的字段。

2.2.0 登录注册

首先,上一次作业的登陆注册接口需要保留,也需要出现在Swagger接口文档中;

上次作业作为加分项的Jwt和过滤器/拦截器,本次作业要求实现

不带token或者token校验错误,拦截请求。但不是所有的接口都需要拦截,有些接口不需要登录并携带token就可以访问,在你的拦截器中配置这些接口的路径,遇到他们直接将他们放行。

2.2.1 添加好友与设置群组(这块需要好好想想数据库表及其字段的设计)

  1. 用户可以通过uid请求添加对方为好友,用户也可以将自己的好友分组(即设置群组)方便群发信件。

  2. 用户可以查看好友列表,可以删除好友(假删除),可以给好友添加备注,可以与好友绑定关系(基友,new Object(),家人等可自由发挥)

加分项:1.好友列表进行模糊查询,分页展示,批量删除

2.自己被对方删除后,自己再给对方发送信件会有一些提示

3.屏蔽功能,类似于微信的拉黑,屏蔽某个好友或用户后,将不会收到他的来信

2.2.2 信箱

信箱分为收件箱和发件箱(二者下面的逻辑差不多)。用户可以管理自己的信箱:

  1. 可以查询信件列表,要求按时间排序,分页展示,模糊查询信件标题&内容

  2. 查询信件详情,将信件标为已读。

  3. 可以新建分类对信件进行分组管理,删除信件,批量删除。

加分项:1.为信件添加置顶功能(该信件是在自己所属分组中置顶)

2.2.3 写信与回信

用户可以在发件箱中写信给指定的用户。

  1. 你作为一个用户,当你知道对方的uid时,就可以写信给他(需要对信件的字段设计时有信件的唯一ID)。当然别人给你发的来信你也可以回复。

tips:用户使用我们的朝辞是在客户端(手机或电脑),我们写的java程序运行在服务器上提供服务,用户想发送信件给某个人就需要先将信件发送给服务器,服务器再将信件转发给目标人,这里涉及到服务器推送技术(websocket),我们将流程简化:

发送信件接口直接将信件内容和必要信息写入数据库,用户请求收件接口时直接将数据库中的数据按需要(已读,未读,延时信件(见下面的需求)到点再展示)展示即可,当然用户肯定只能看到属于自己的发件和收件吧。

补充:收件接口即“查件接口”,即查询自己所收到的邮件

  1. 你也可以寻找陌生人,把信件发给他(随机查用户表拿一个用户,类似于漂流瓶啦)。

  2. 可以延时发送消息(一个惊喜信件,发给24年冬天的ta)

延时的实现很简单(你需要一个字段区分该信件是否可见,并且设置一个定时任务(Spring Task),到时间了该定时任务就把该字段设为可见,并且把时间字段设为当前时间,因为此时如果把时间设为发信时的时间,按时间排序查询信箱里的信件不就看不到这封信了嘛)

2.3 业务实现补充提示

提示1 数据库设计:

部分业务的实现可能需要用到数据库的一对多、多对多设计,可能需要用到连表查询等。个人认为这里有些难度,大家完成时要有耐心,做好注释。

提示2 接口设计:

对于每个用户而言,自己的好友列表和备注、邮箱等都是不同的,所以我们要在部分接口内获得该用户的信息,然后根据用户信息对数据进行过滤就行啦。

提示3 假删除:

真删除 : 指的就是彻底地删除。 从数据库表内将数据 进行移除 delete 。就是删除了数据库某一张表中的某一条记录,不但前端访问数据库的时候得不到这些数据,后台访问数据库的时候也看不到这条记录了.

假删除: 指的就是逻辑上的删除。数据库表内, 数据会包含一个标识flag字段 , 例如: status(删除标识,0代表未删除,1代表删除,默认为0) ,执行假删时,只是将数据的删除标识 status从 0 改 1(update)。 本质上是数据的更新.后台访问数据库的时候仍然可以访问这写条数据,只不过前端访问接口的时候得不到这些数据了,相当于这些数据在用户的"眼"中被删除了.但后台访问数据库的时候仍然能看到这条数据

本次要求使用假删除的方式删除好友和信件。

提示4 模糊查询:

大家平常在搜索信息的时候,通常不需要输入完整的关键词,就能查询到相应的信息。如搜索“微积分”可以搜索到“微积分(1)”和“微积分(2)”等。

模糊查询和直接展示可以用同一个接口实现,根据传参动态查询。

提示5分页展示:

当查询的结果非常多的时候,一次性把大量的数据传给前端会造成前端压力过大。这种时候就需要使用分页功能,把数据分成很多页的,一页一页的传送到前端。

这个加分项所需的技术栈不限制,大家可以自己找现成的模块也可以自己手写。

提示6 JWT工具类参考:

对于上次作业未完成加分项作业的同学进行参考:JWT工具类需要有一个getToken方法颁发token,一个verify方法校验token,一个decodeUser方法解析token携带的用户信息,获得登录用户的id,昵称等信息

3. 项目要求

3.1 项目基本要求

  1. 可以在上一次Springboot大作业的基础上接着做,但是注意用户数据库表可能需要重新设计;

  2. 上一次Springboot大作业的着重的项目分包、命名规范、业务逻辑、数据库设计等等这几个方面的建议依然需要保持住哦~

  3. 本次作业由于每个业务都比较复杂,实现方式多样,所以完成项目时要注意添加注释(尤其是Service层),便于学长更好的对你的作业进行评估~

一种可以稍微参考一下的注释,当然也可以随个人喜好:

3.2 技术栈要求

  1. 整个项目为MVC架构,整体使用springboot框架;

  2. 持久层框架要求使用mybatis-plus或JPA;

  3. 需要使用swagger生成接口文档

  4. 作为上一次作业加分项的 Jwt 和 过滤器/拦截器;

  5. 实现全局异常处理,并合理向前端返回适当的报错信息;

  6. 要求加上统一返回类

  7. 有条件的同学,可以尝试在linux云服务器上部署MySQL;

3.3 项目分包参考

可以参考这份文档的项目分包:

WeRun2024 Java 22级大作业

3.4 其他内容

该部分内容可在做完上述作业和加分项后进行学习,也可在做项目时提供帮助:

  1. 单元测试:可以单独测试单一模块

  2. ER图:在数据库设计和实体类设计上有帮助

  3. 反射与AOP

  4. Redis:可以使用redis存储登陆注册时的token

  5. 前端页面等

3.5 提交要求

和上次类似,提交:项目文件 + 数据库sql文件 + 接口文档(内含Swagger截图);

数据库sql文件如导出有困难,可以截图“设计表”部分查看数据库结构,如表名、字段名、类型、长度、注释等。

将程序源文件以及附录打压缩包发送到邮箱 werun_backend@163.com,邮件名为 学号-姓名-23级Java第三次作业。

原定时间为2月25日提交,当然如果没有完成也可以后续再提交。

4.写在最后

tips:本次作业中需要的技术栈或各种功能点可以去B站找视频学习或去CSDN找博客学习

大家如果在技术上或者本项目的业务逻辑上有任何问题,欢迎来找群里的学长学长们讨论,相信通过本次作业大家都能有所收获,有所成长。

最后的最后,愿我们都能走在一条开满桃花的路上,云蒸霞蔚,前途似锦!(屎盆子镶金边了属于是)