1 项目概述
1.1 用户模块
用户模块负责管理系统的用户信息,包括注册、登录、用户信息管理等功能。
1.1.1 用户注册
功能描述:新用户可以通过注册功能创建账号。
输入:
用户名
密码
邮箱
手机号(可选)
输出:
注册成功:返回用户 ID 和注册成功消息。
注册失败:返回错误信息(如用户名已存在、邮箱已注册等)。
1.1.2 用户登录
功能描述:用户通过用户名和密码登录系统。
输入:
用户名
密码
输出:
登录成功:返回 JWT Token 和用户基本信息。
登录失败:返回错误信息(如用户名或密码错误)。
1.1.3 获取用户详细信息
功能描述:获取当前登录用户的详细信息。
输入:
用户 ID(通过 Token 解析)
输出:
用户详细信息(用户名、邮箱、头像、注册时间等)。
1.1.4 更新用户基本信息
功能描述:用户可更新自己的基本信息(如用户名、邮箱、手机号等)。
输入:
用户名(可选)
邮箱(可选)
手机号(可选)
输出:
更新成功:返回成功消息。
更新失败:返回错误信息(如邮箱已存在)。
1.1.5 更新用户头像
功能描述:用户可上传并更新自己的头像。
输入:
头像文件(图片)
输出:
更新成功:返回新头像的 URL。
更新失败:返回错误信息(如文件格式不支持)。
1.1.6 更新用户密码
功能描述:用户可更新自己的登录密码。
输入:
旧密码
新密码
输出:
更新成功:返回成功消息。
更新失败:返回错误信息(如旧密码错误)。
1.2 文章分类模块
文章分类模块负责管理文章的分类信息,支持分类的增删改查操作。
1.2.1 文章分类列表
功能描述:获取所有文章分类的列表。
输入:
分页参数(页码、每页数量)
输出:
分类列表(分类 ID、分类名称、创建时间等)。
1.2.2 新增文章分类
功能描述:管理员可新增文章分类。
输入:
分类名称
输出:
新增成功:返回分类 ID 和成功消息。
新增失败:返回错误信息(如分类名称已存在)。
1.2.3 更新文章分类
功能描述:管理员可更新文章分类的名称。
输入:
分类 ID
新分类名称
输出:
更新成功:返回成功消息。
更新失败:返回错误信息(如分类名称已存在)。
1.2.4 获取文章分类详情
功能描述:获取指定分类的详细信息。
输入:
分类 ID
输出:
分类详情(分类 ID、分类名称、创建时间等)。
1.2.5 删除文章分类
功能描述:管理员可删除指定的文章分类。
输入:
分类 ID
输出:
删除成功:返回成功消息。
删除失败:返回错误信息(如分类下存在文章)。
1.3 文章管理模块
文章管理模块负责管理文章的增删改查操作,支持条件查询和分页。
1.3.1 新增文章
功能描述:用户可新增一篇文章。
输入:
标题
内容
分类 ID
标签(可选)
输出:
新增成功:返回文章 ID 和成功消息。
新增失败:返回错误信息(如分类不存在)。
1.3.2 更新文章
功能描述:用户可更新自己发布的文章。
输入:
文章 ID
新标题(可选)
新内容(可选)
新分类 ID(可选)
输出:
更新成功:返回成功消息。
更新失败:返回错误信息(如文章不存在或用户无权限)。
1.3.3 获取文章详情
功能描述:获取指定文章的详细信息。
输入:
文章 ID
输出:
文章详情(标题、内容、分类、作者、创建时间等)。
1.3.4 删除文章
功能描述:用户可删除自己发布的文章。
输入:
文章 ID
输出:
删除成功:返回成功消息。
删除失败:返回错误信息(如文章不存在或用户无权限)。
1.3.5 文章列表(条件分类)
功能描述:根据条件查询文章列表,支持分页。
输入:
分类 ID(可选)
关键词(可选,用于标题或内容搜索)
分页参数(页码、每页数量)
输出:
文章列表(文章 ID、标题、分类、作者、创建时间等)。
1.4 其他功能
1.4.1 权限管理
用户只能管理自己的文章。
管理员可管理所有文章和分类。
1.4.2 数据校验
使用 Spring Validation 对输入数据进行校验。
校验规则包括:
用户名、密码长度限制。
邮箱格式校验。
文件格式校验(头像上传)。
1.4.3 缓存管理
使用 Redis 缓存文章列表和分类列表,提升系统性能。
1.4.4 单元测试
使用 JUnit 对核心功能进行单元测试,确保代码质量。
2 环境搭建
2.1 执行sql语句,准备数据库表
-- 创建数据库
create database big_event;
-- 使用数据库
use big_event;
-- 用户表
create table user (
id int unsigned primary key auto_increment comment 'ID',
username varchar(20) not null unique comment '用户名',
password varchar(32) comment '密码',
nickname varchar(10) default '' comment '昵称',
email varchar(128) default '' comment '邮箱',
user_pic varchar(128) default '' comment '头像',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '修改时间'
) comment '用户表';
-- 分类表
create table category(
id int unsigned primary key auto_increment comment 'ID',
category_name varchar(32) not null comment '分类名称',
category_alias varchar(32) not null comment '分类别名',
create_user int unsigned not null comment '创建人ID',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '修改时间',
constraint fk_category_user foreign key (create_user) references user(id) -- 外键约束
);
-- 文章表
create table article(
id int unsigned primary key auto_increment comment 'ID',
title varchar(30) not null comment '文章标题',
content varchar(10000) not null comment '文章内容',
cover_img varchar(128) not null comment '文章封面',
state varchar(3) default '草稿' comment '文章状态: 只能是[已发布] 或者 [草稿]',
category_id int unsigned comment '文章分类ID',
create_user int unsigned not null comment '创建人ID',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '修改时间',
constraint fk_article_category foreign key (category_id) references category(id),-- 外键约束
constraint fk_article_user foreign key (create_user) references user(id) -- 外键约束
)
2.2 创建springboot工程
2.3 引入依赖
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis Starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- Lombok(可选) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
2.4 配置 application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/big_event
username: root
password: 123456
2.5 创建包结构
2.6 准备实体类
public class Article {
private Integer id;//主键ID
private String title;//文章标题
private String content;//文章内容
private String coverImg;//封面图像
private String state;//发布状态 已发布|草稿
private Integer categoryId;//文章分类id
private Integer createUser;//创建人ID
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
public class Category {
private Integer id;//主键ID
private String categoryName;//分类名称
private String categoryAlias;//分类别名
private Integer createUser;//创建人ID
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
public class User {
private Integer id;//主键ID
private String username;//用户名
private String password;//密码
private String nickname;//昵称
private String email;//邮箱
private String userPic;//用户头像地址
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
2.7 启动类
@SpringBootApplication
public class MyEventApplication {
public static void main(String[] args) {
SpringApplication.run(MyEventApplication.class, args);
}
}