add smtp, finish redis and register(with invitation code and verification code)

Change-Id: Ie8e07fe058b9d970a00424d463ce30d4ec72086a
diff --git a/src/main/java/com/example/g8backend/controller/AuthController.java b/src/main/java/com/example/g8backend/controller/AuthController.java
index 77e4130..39183c1 100644
--- a/src/main/java/com/example/g8backend/controller/AuthController.java
+++ b/src/main/java/com/example/g8backend/controller/AuthController.java
@@ -1,8 +1,10 @@
 package com.example.g8backend.controller;
 
+import com.example.g8backend.dto.UserRegisterDTO;
 import com.example.g8backend.entity.User;
 import com.example.g8backend.service.IUserService;
 import com.example.g8backend.util.JwtUtil;
+import com.example.g8backend.util.mailUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.ResponseEntity;
@@ -11,6 +13,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 @RestController
 @RequestMapping("/auth")
@@ -20,6 +23,9 @@
     private IUserService userService;
 
     @Autowired
+    private mailUtil mailUtil;
+
+    @Autowired
     private PasswordEncoder passwordEncoder;
 
     @Autowired
@@ -28,13 +34,41 @@
     @Autowired
     RedisTemplate<String, Object> redisTemplate;
 
+    // 发送验证码
+    @PostMapping("/send_verification_code")
+    public ResponseEntity<?> sendVerificationCode(@RequestBody UserRegisterDTO registerDTO) {
+        if (userService.getUserByEmail(registerDTO.getEmail()) != null) {
+            return ResponseEntity.badRequest().body("邮箱已存在");
+        }
+
+        String verificationCode = UUID.randomUUID().toString().substring(0, 6);
+        mailUtil.sendMail(registerDTO.getEmail(), "PT平台注册验证码", "您的验证码为:" + verificationCode + ",验证码十分钟内有效,请勿泄露。");
+
+        redisTemplate.opsForValue().set(registerDTO.getEmail(), verificationCode, 10 * 60, java.util.concurrent.TimeUnit.SECONDS);
+        return ResponseEntity.ok("验证码发送成功");
+    }
+
     // 用户注册
     @PostMapping("/register")
-    public ResponseEntity<?> register(@RequestBody User user) {
-        if (userService.getUserByName(user.getUserName()) != null) {
+    public ResponseEntity<?> register(@RequestBody UserRegisterDTO registerDTO) {
+        if (userService.getUserByName(registerDTO.getUserName()) != null) {
             return ResponseEntity.badRequest().body("用户名已存在");
         }
+
+        if (!redisTemplate.hasKey(registerDTO.getInvitationCode())) {
+            return ResponseEntity.badRequest().body("邀请码错误");
+        }
+        if (!registerDTO.getVerificationCode().equals(redisTemplate.opsForValue().get(registerDTO.getEmail()))) {
+            return ResponseEntity.badRequest().body("验证码错误");
+        }
+        redisTemplate.delete(registerDTO.getEmail());
+
+        User user = new User();
+        user.setUserName(registerDTO.getUserName());
+        user.setPassword(passwordEncoder.encode(registerDTO.getPassword()));
+        user.setEmail(registerDTO.getEmail());
         userService.registerUser(user);
+
         return ResponseEntity.ok("注册成功");
     }