删除了邀请码部分
Change-Id: I6bb6a1b3ec092bebdc9c33364b9b385c6519f989
Signed-off-by: Your Name <your.email@example.com>
diff --git a/src/main/java/edu/bjtu/groupone/backend/controller/UserController.java b/src/main/java/edu/bjtu/groupone/backend/controller/UserController.java
index 1388940..7ac29f1 100644
--- a/src/main/java/edu/bjtu/groupone/backend/controller/UserController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/controller/UserController.java
@@ -1,9 +1,7 @@
package edu.bjtu.groupone.backend.controller;
-import edu.bjtu.groupone.backend.model.InviteCode;
import edu.bjtu.groupone.backend.model.Result;
import edu.bjtu.groupone.backend.model.User;
-import edu.bjtu.groupone.backend.service.InviteCodeService;
import edu.bjtu.groupone.backend.service.UserService;
import edu.bjtu.groupone.backend.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
@@ -22,8 +20,6 @@
@Autowired
private UserService userService;
- @Autowired
- private InviteCodeService inviteCodeService;
/** 登录:接收表单字段 identificationNumber、password */
@PostMapping("/login")
@@ -56,13 +52,9 @@
@RequestParam String email,
@RequestParam String password,
@RequestParam String verificationCode,
- @RequestParam Integer identificationNumber,
- @RequestParam String inviteCode
+ @RequestParam Integer identificationNumber
) {
- // 1. 验证邀请码
- if (inviteCodeService.validateInviteCode(inviteCode) == null) {
- return Result.error("无效邀请码或已过期");
- }
+
// 2. 验证邮箱验证码
if (!userService.verifyCode(email, verificationCode)) {
return Result.error("验证码错误或已过期");
@@ -83,22 +75,16 @@
);
// 5. 插入到数据库
userService.register(newUser);
- // 6. 扣减邀请码次数
- if (!inviteCodeService.useInviteCode(inviteCode)) {
- log.error("邀请码扣减失败, code={}", inviteCode);
- }
+
return Result.success("注册成功");
}
/** 发送邮箱验证码:接收表单字段 email、inviteCode */
@PostMapping("/sendVerification")
public Result sendVerification(
- @RequestParam String email,
- @RequestParam String inviteCode
+ @RequestParam String email
) {
- if (inviteCodeService.validateInviteCode(inviteCode) == null) {
- return Result.error("无效邀请码");
- }
+
userService.sendVerificationCode(email);
return Result.success("验证码已发送");
}
diff --git a/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java b/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java
index f3b9d2d..f00a646 100644
--- a/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java
+++ b/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java
@@ -14,6 +14,8 @@
@Slf4j
@Component
public class Interceptor implements HandlerInterceptor {
+
+
@Override
public boolean preHandle(HttpServletRequest req,
HttpServletResponse resp,
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/InviteCodeMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/InviteCodeMapper.java
deleted file mode 100644
index 78bb7e0..0000000
--- a/src/main/java/edu/bjtu/groupone/backend/mapper/InviteCodeMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package edu.bjtu.groupone.backend.mapper;
-
-import edu.bjtu.groupone.backend.model.InviteCode;
-import org.apache.ibatis.annotations.*;
-
-@Mapper
-public interface InviteCodeMapper {
- @Select("SELECT * FROM invite_code WHERE code = #{code}")
- InviteCode selectByCode(String code);
-
- @Update("UPDATE invite_code SET remaining_uses = remaining_uses - 1 " +
- "WHERE code = #{code} AND remaining_uses > 0")
- int decrementRemainingUses(String code);
-}
diff --git a/src/main/java/edu/bjtu/groupone/backend/model/InviteCode.java b/src/main/java/edu/bjtu/groupone/backend/model/InviteCode.java
deleted file mode 100644
index f1019f9..0000000
--- a/src/main/java/edu/bjtu/groupone/backend/model/InviteCode.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package edu.bjtu.groupone.backend.model;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import java.time.LocalDateTime;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class InviteCode {
- private String code;
- private int maxUses;
- private int remainingUses;
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime expiryTime; //失效时间
- private int createdBy; //创建者的id
-}
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/InviteCodeService.java b/src/main/java/edu/bjtu/groupone/backend/service/InviteCodeService.java
deleted file mode 100644
index 9391e14..0000000
--- a/src/main/java/edu/bjtu/groupone/backend/service/InviteCodeService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package edu.bjtu.groupone.backend.service;
-
-import edu.bjtu.groupone.backend.model.InviteCode;
-
-public interface InviteCodeService {
- InviteCode validateInviteCode(String code);
- boolean useInviteCode(String code);
-}
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/impl/InviteCodeServiceImpl.java b/src/main/java/edu/bjtu/groupone/backend/service/impl/InviteCodeServiceImpl.java
deleted file mode 100644
index b08b7a5..0000000
--- a/src/main/java/edu/bjtu/groupone/backend/service/impl/InviteCodeServiceImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package edu.bjtu.groupone.backend.service.impl;
-
-import edu.bjtu.groupone.backend.mapper.InviteCodeMapper;
-import edu.bjtu.groupone.backend.model.InviteCode;
-import edu.bjtu.groupone.backend.service.InviteCodeService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-
-@Service
-public class InviteCodeServiceImpl implements InviteCodeService {
-
- @Autowired
- private InviteCodeMapper inviteCodeMapper;
-
- /**
- * 验证邀请码是否存在、未过期且剩余次数大于 0
- */
- @Override
- public InviteCode validateInviteCode(String code) {
- InviteCode inviteCode = inviteCodeMapper.selectByCode(code);
- if (inviteCode == null
- || inviteCode.getRemainingUses() <= 0
- || inviteCode.getExpiryTime().isBefore(LocalDateTime.now())) {
- return null;
- }
- return inviteCode;
- }
-
- /**
- * 使用一次邀请码:先验证再扣减剩余次数
- */
- @Override
- public boolean useInviteCode(String code) {
- // 先调用 validateInviteCode 保证业务合理性
- InviteCode valid = validateInviteCode(code);
- if (valid == null) {
- return false;
- }
- // 再执行扣减
- int updated = inviteCodeMapper.decrementRemainingUses(code);
- return updated > 0;
- }
-}
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index 8bb0c85..823ecdf 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -13,15 +13,7 @@
INDEX `idx_user_id` (`user_id`) -- 可选:主键通常自带索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-CREATE TABLE invite_code (
- code VARCHAR(20) PRIMARY KEY,
- max_uses INT NOT NULL,
- remaining_uses INT NOT NULL,
- expiry_time DATETIME NOT NULL,
- created_by INT NOT NULL,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- FOREIGN KEY (created_by) REFERENCES user(user_id)
-);
+
CREATE TABLE user_follow (
follower_id INT NOT NULL,
@@ -38,8 +30,3 @@
'admin', 'admin@example.com', 'admin123', NOW(), 87654321, 'admin'
);
-INSERT INTO invite_code (
- code, max_uses, remaining_uses, expiry_time, created_by
-) VALUES
- ('WELCOME2025', 5, 5, '2026-01-01 00:00:00', 1),
- ('INVITEONLY', 3, 3, '2025-12-31 23:59:59', 1);
\ No newline at end of file
diff --git a/src/main/resources/static/home.html b/src/main/resources/static/home.html
index 635856a..5cac114 100644
--- a/src/main/resources/static/home.html
+++ b/src/main/resources/static/home.html
@@ -1,24 +1,30 @@
-<!-- src/main/resources/static/home.html -->
<!DOCTYPE html>
<html lang="zh-CN">
-<head><meta charset="UTF-8"><title>首页</title></head>
+<head>
+ <meta charset="UTF-8">
+ <title>首页</title>
+</head>
<body>
<h1>欢迎访问受保护页面</h1>
<div id="userInfo"></div>
<script>
- (async ()=>{
- const token = localStorage.getItem('token');
- if (!token) return window.location.href='login.html';
+ (async () => {
+ const token = localStorage.getItem('token'); // 从 localStorage 获取 token
+ if (!token) return window.location.href = 'login.html'; // 如果 token 不存在,重定向到登录页面
+
const res = await fetch('/api/me', {
- headers: { 'token': token }
+ headers: { 'token': token } // 使用 token 请求用户信息
});
- const json = await res.json();
- if (json.code!==0) {
- return window.location.href='login.html';
+
+ const json = await res.json(); // 解析响应数据
+ if (json.code !== 0) {
+ return window.location.href = 'login.html'; // 如果获取用户信息失败,重定向到登录页面
}
+
+ // 输出当前用户和 token
document.getElementById('userInfo')
- .innerText = '当前用户:' + json.data.username;
+ .innerText = '当前用户:' + json.data.username + ',Token:' + json.data; // 显示用户名和 token
})();
</script>
</body>
-</html>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/static/register.html b/src/main/resources/static/register.html
index 1e43e90..549c790 100644
--- a/src/main/resources/static/register.html
+++ b/src/main/resources/static/register.html
@@ -19,8 +19,6 @@
<input type="password" name="password" required>
<label>身份证号(8 位数字):</label>
<input type="number" name="identificationNumber" required>
- <label>邀请码:</label>
- <input type="text" name="inviteCode" required>
<button type="submit">注册</button>
</form>
<script>
@@ -28,7 +26,6 @@
.addEventListener('click', async () => {
const form = new URLSearchParams();
form.set('email', document.querySelector('[name=email]').value);
- form.set('inviteCode', document.querySelector('[name=inviteCode]').value);
const res = await fetch('/sendVerification', {
method: 'POST',
body: form
diff --git a/src/test/java/edu/bjtu/groupone/backend/UserControllerTest.java b/src/test/java/edu/bjtu/groupone/backend/UserControllerTest.java
index 7e2f691..7e82896 100644
--- a/src/test/java/edu/bjtu/groupone/backend/UserControllerTest.java
+++ b/src/test/java/edu/bjtu/groupone/backend/UserControllerTest.java
@@ -9,11 +9,8 @@
import ch.qos.logback.classic.Logger;
import org.slf4j.LoggerFactory;
import edu.bjtu.groupone.backend.mapper.UserMapper;
-import edu.bjtu.groupone.backend.mapper.InviteCodeMapper;
import edu.bjtu.groupone.backend.model.User;
-import edu.bjtu.groupone.backend.model.InviteCode;
import edu.bjtu.groupone.backend.service.impl.UserServImpl;
-import edu.bjtu.groupone.backend.service.impl.InviteCodeServiceImpl;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
@@ -29,14 +26,12 @@
@Mock
private UserMapper userMapper;
- @Mock
- private InviteCodeMapper inviteCodeMapper;
+
@InjectMocks
private UserServImpl userService;
- @InjectMocks
- private InviteCodeServiceImpl inviteCodeService;
+
@Test
public void testLogin() {
@@ -56,27 +51,5 @@
verify(userMapper, times(1)).login(loginUser);
}
- @Test
- public void testUseInviteCode() {
- String inviteCode = "TESTCODE";
- // 构造一个有效的 InviteCode,注意设置 expiryTime
- InviteCode dummy = new InviteCode();
- dummy.setCode(inviteCode);
- dummy.setRemainingUses(1);
- // 设置有效期在未来,避免调用 expiryTime.isBefore(...)
- dummy.setExpiryTime(LocalDateTime.now().plusDays(1));
-
- // Stub 两个 Mapper 方法
- when(inviteCodeMapper.selectByCode(inviteCode)).thenReturn(dummy);
- when(inviteCodeMapper.decrementRemainingUses(inviteCode)).thenReturn(1);
-
- // 调用 service
- boolean used = inviteCodeService.useInviteCode(inviteCode);
-
- // 断言和验证
- assertThat(used).isTrue();
- verify(inviteCodeMapper, times(1)).selectByCode(inviteCode);
- verify(inviteCodeMapper, times(1)).decrementRemainingUses(inviteCode);
- }
}