From fe91e5aba8e4c238369a0700535741ccd4a1a55f Mon Sep 17 00:00:00 2001 From: DC_DC Date: Tue, 23 Apr 2024 21:13:38 +0800 Subject: [PATCH] =?UTF-8?q?feat-=E5=AE=8C=E6=88=90=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=AF=B9user=5Fdata=E8=A1=A8=E7=9A=84=E6=A3=80?= =?UTF-8?q?=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/dcsy/stsy/aspect/LoggingAspect.java | 11 ++++ .../stsy/config/StartupConfiguration.java | 63 +++++++++++++++++++ .../stsy/controllers/BasicController.java | 25 +++++++- .../dcsy/stsy/controllers/MailController.java | 37 +++++++++++ .../stsy/models/voData/BasicRegisterVO.java | 17 +++++ .../stsy/models/voData/MailSendCodeVO.java | 17 +++++ src/main/resources/application.yml | 2 +- 7 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 src/main/java/cn/dcsy/stsy/config/StartupConfiguration.java create mode 100644 src/main/java/cn/dcsy/stsy/controllers/MailController.java create mode 100644 src/main/java/cn/dcsy/stsy/models/voData/BasicRegisterVO.java create mode 100644 src/main/java/cn/dcsy/stsy/models/voData/MailSendCodeVO.java diff --git a/src/main/java/cn/dcsy/stsy/aspect/LoggingAspect.java b/src/main/java/cn/dcsy/stsy/aspect/LoggingAspect.java index e3fd8f7..08797fd 100644 --- a/src/main/java/cn/dcsy/stsy/aspect/LoggingAspect.java +++ b/src/main/java/cn/dcsy/stsy/aspect/LoggingAspect.java @@ -27,4 +27,15 @@ public class LoggingAspect { log.info("[CONTROLLER] 获取 {} 类的 {} 方法", targetClass.getName(), methodName); } + +// @Before("execution(* cn.dcsy.stsy.service.impl.*.*(..))") +// public void serviceAspect(JoinPoint joinPoint) { +// Signature signature = joinPoint.getSignature(); +// String methodName = signature.getName(); +// +// Object targetObject = joinPoint.getTarget(); +// Class targetClass = targetObject.getClass(); +// +// log.info("[SERVICE] 获取 {} 类的 {} 方法", targetClass.getName(), methodName); +// } } diff --git a/src/main/java/cn/dcsy/stsy/config/StartupConfiguration.java b/src/main/java/cn/dcsy/stsy/config/StartupConfiguration.java new file mode 100644 index 0000000..7855a4c --- /dev/null +++ b/src/main/java/cn/dcsy/stsy/config/StartupConfiguration.java @@ -0,0 +1,63 @@ +package cn.dcsy.stsy.config; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; + +import java.sql.SQLSyntaxErrorException; + +/** + * @author DC_DC + * Date: 2024/4/23/20:37 + */ +@Configuration +public class StartupConfiguration { + + private static final Logger log = LoggerFactory.getLogger(StartupConfiguration.class); + + @Bean + @Order(1) + public CommandLineRunner sqlPreparation(JdbcTemplate jdbcTemplate) { + log.info("[Runner]执行数据库初始化语句"); + return args -> { + // 创建数据表 + // MySQL默认不支持在单个语句或批次中执行多个命令,需要分割SQL语句 + log.info("\t->创建 userdata 数据表"); + jdbcTemplate.execute( + """ + create table if not exists user_data + ( + uid bigint unsigned not null comment '用户表序号' + primary key, + uuid char(36) not null comment '用户唯一识别码', + name varchar(100) not null comment '用户名', + gender varchar(10) null comment '用户性别', + email varchar(100) not null comment '用户邮箱', + password varchar(255) not null comment '用户密码', + avatar text null comment '用户头像', + create_at timestamp not null comment '用户创建时间', + deleted_at timestamp null comment '用户删除时间', + update_at timestamp null comment '用户更新时间', + all_stories json null comment '与用户相关的所有故事', + constraint user_data_email_uindex + unique (email)); + """ + ); + try { + jdbcTemplate.execute("CREATE INDEX uuid_index ON user_data (uuid)"); + } catch (DataAccessException ex) { + SQLSyntaxErrorException sqlSyntaxErrorException = (SQLSyntaxErrorException) ex.getCause(); + if (sqlSyntaxErrorException.getMessage().contains("Duplicate key name")) { + log.info("\t->索引已经存在"); + } else { + log.error(String.valueOf(ex)); + } + } + }; + } +} diff --git a/src/main/java/cn/dcsy/stsy/controllers/BasicController.java b/src/main/java/cn/dcsy/stsy/controllers/BasicController.java index e328f5b..b8915d7 100644 --- a/src/main/java/cn/dcsy/stsy/controllers/BasicController.java +++ b/src/main/java/cn/dcsy/stsy/controllers/BasicController.java @@ -1,6 +1,7 @@ package cn.dcsy.stsy.controllers; import cn.dcsy.stsy.models.voData.BasicLoginVO; +import cn.dcsy.stsy.models.voData.BasicRegisterVO; import cn.dcsy.stsy.service.UserService; import cn.dcsy.stsy.utils.BaseResponse; import cn.dcsy.stsy.utils.ErrorCode; @@ -37,22 +38,44 @@ public class BasicController { return ResultUtil.success("访问成功"); } + @PostMapping("/basic/register") + public ResponseEntity register( + @RequestBody @Validated BasicRegisterVO basicRegisterVO, + @NotNull BindingResult bindingResult, + HttpServletRequest request + ) { + // 注册账号和发送验证码分了两个控制器,因为输入邮箱注册,旁边会有一个按钮,点击发送之后,调用邮件控制器进行发送邮件,所以在注册控制器中,只需要提取用户填入的验证码信息进行校验就好了 + log.info("\t->尝试注册账号 邮箱: {}", basicRegisterVO.getEmail()); + if (bindingResult.hasErrors()) { + return ResultUtil.error("RequestBodyError", ErrorCode.REQUEST_BODY_ERROR, bindingResult.getAllErrors()); + } + return ResultUtil.success("注册成功"); + } + /** * 用户登录 * */ @PostMapping("/login") public ResponseEntity login( + // 使用@RequestBody注解接受前端返回的json数据,一般我们都是使用json传递数据 @RequestBody @Validated BasicLoginVO basicLoginVO, @NotNull BindingResult bindingResult, HttpServletRequest request ) { - log.info("\t尝试登录 用户名: {}", basicLoginVO.getUsername()); + log.info("\t->尝试登录 用户名: {}", basicLoginVO.getUsername()); if (bindingResult.hasErrors()) { return ResultUtil.error("RequestBodyError", ErrorCode.REQUEST_BODY_ERROR, bindingResult.getAllErrors()); } return userService.login(request, basicLoginVO); } + + + + + + + @GetMapping("/user/{userId}") public ResponseEntity getUserCurrent(@PathVariable String userId) { log.info("获取用户 {}", userId); diff --git a/src/main/java/cn/dcsy/stsy/controllers/MailController.java b/src/main/java/cn/dcsy/stsy/controllers/MailController.java new file mode 100644 index 0000000..bd74f10 --- /dev/null +++ b/src/main/java/cn/dcsy/stsy/controllers/MailController.java @@ -0,0 +1,37 @@ +package cn.dcsy.stsy.controllers; + +import cn.dcsy.stsy.models.voData.MailSendCodeVO; +import cn.dcsy.stsy.utils.BaseResponse; +import jakarta.servlet.http.HttpServletRequest; +import org.jetbrains.annotations.NotNull; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * @author DC_DC + * Date: 2024/4/23/20:26 + */ + +public class MailController { + /** + * sendMailCode + *
+ * 用于发送邮件验证码,用户可以通过该接口发送邮件验证码 + * + * @param mailSendCodeVO 邮件发送验证码的请求参数 + * @param request 请求对象 + * @param bindingResult 请求参数的校验结果 + * @return 返回发送邮件验证码的结果 + * */ + @PostMapping("/send") + public ResponseEntity sendMailCode( + @RequestBody @Validated MailSendCodeVO mailSendCodeVO, + @NotNull BindingResult bindingResult, + @NotNull HttpServletRequest request + ){ + return null; + } +} diff --git a/src/main/java/cn/dcsy/stsy/models/voData/BasicRegisterVO.java b/src/main/java/cn/dcsy/stsy/models/voData/BasicRegisterVO.java new file mode 100644 index 0000000..322cabb --- /dev/null +++ b/src/main/java/cn/dcsy/stsy/models/voData/BasicRegisterVO.java @@ -0,0 +1,17 @@ +package cn.dcsy.stsy.models.voData; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author DC_DC + * Date: 2024/4/23/20:17 + */ +@Getter +@Setter +public class BasicRegisterVO { + private String email; + private String code; + private String username; + private String password; +} diff --git a/src/main/java/cn/dcsy/stsy/models/voData/MailSendCodeVO.java b/src/main/java/cn/dcsy/stsy/models/voData/MailSendCodeVO.java new file mode 100644 index 0000000..91b6d46 --- /dev/null +++ b/src/main/java/cn/dcsy/stsy/models/voData/MailSendCodeVO.java @@ -0,0 +1,17 @@ +package cn.dcsy.stsy.models.voData; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +/** + * @author DC_DC + * Date: 2024/4/23/20:35 + */ +@Data +public class MailSendCodeVO { + @Email(message = "邮箱格式不正确") + public String email; + @NotBlank(message = "模板不能为空") + public String template; +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1441997..6b8894b 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -3,6 +3,6 @@ server: spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3305 + url: jdbc:mysql://localhost:3305/stories_system username: "root" password: "123456" \ No newline at end of file