修改login,register逻辑
Change-Id: If07481bce426e50165c4005416fa9911b218aee4
diff --git a/src/main/java/database/DataManagerInterface.java b/src/main/java/database/DataManagerInterface.java
index e737daa..e2fb1fb 100644
--- a/src/main/java/database/DataManagerInterface.java
+++ b/src/main/java/database/DataManagerInterface.java
@@ -11,6 +11,7 @@
//DB1
public int RegisterUser(User userinfo);// 返回状态:0 success,1 邮箱重复,2其他原因
+ public String LoginUser(User userinfo);
public int UpdateInformation(User userinfo);// 返回状态:0 success,1 不存在,2其他原因
public User GetInformation(String userid);// 返回用户的全部基本信息
diff --git a/src/main/java/database/Database1.java b/src/main/java/database/Database1.java
index ed64717..b89dc18 100644
--- a/src/main/java/database/Database1.java
+++ b/src/main/java/database/Database1.java
@@ -19,6 +19,7 @@
import entity.QUser;
import entity.QUserPT;
import entity.QUserStar;
+import entity.QUserInvite;
import entity.Seed;
import entity.User;
import entity.UserPT;
@@ -38,23 +39,85 @@
props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
this.entitymanager = Persistence.createEntityManagerFactory("myPersistenceUnit", props).createEntityManager();
}
+ @Override
+ public String LoginUser(User userinfo){
+ try {
+ // 检查传入的参数是否合法
+ if (userinfo == null || userinfo.password == null) {
+ return null;
+ }
+
+ // 用户名和邮箱应该有且仅有一个不为空
+ boolean hasUsername = userinfo.username != null && !userinfo.username.isEmpty();
+ boolean hasEmail = userinfo.email != null && !userinfo.email.isEmpty();
+
+ // 如果两个都为空或两个都不为空,返回null
+ if ((!hasUsername && !hasEmail) || (hasUsername && hasEmail)) {
+ return null;
+ }
+
+ JPAQuery<User> query = new JPAQuery<>(entitymanager);
+ QUser u = QUser.user;
+ User foundUser = null;
+
+ if (hasUsername) {
+ // 通过用户名和密码查找
+ foundUser = query.select(u)
+ .from(u)
+ .where(u.username.eq(userinfo.username)
+ .and(u.password.eq(userinfo.password)))
+ .fetchOne();
+ } else {
+ // 通过邮箱和密码查找
+ foundUser = query.select(u)
+ .from(u)
+ .where(u.email.eq(userinfo.email)
+ .and(u.password.eq(userinfo.password)))
+ .fetchOne();
+ }
+
+ // 如果找到匹配的用户则返回用户ID,否则返回null
+ return foundUser != null ? foundUser.userid : null;
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
// 返回状态:0 success,1 邮箱重复,2其他原因
@Override
public int RegisterUser(User userinfo){
try{
+ // 首先检查该邮箱是否在UserInvite表中被邀请过
+ JPAQuery<String> inviteQuery = new JPAQuery<>(entitymanager);
+ QUserInvite ui = QUserInvite.userInvite;
+ List<String> invitedEmails = inviteQuery.select(ui.inviterEmail).from(ui).fetch();
+
+ // 如果邮箱不在被邀请列表中,拒绝注册
+ if(!invitedEmails.contains(userinfo.email)){
+ return 2; // 未被邀请
+ }
+
+ // 检查邮箱是否已在User表中存在
JPAQuery<String> query = new JPAQuery<>(entitymanager);
QUser u = QUser.user;
List<String> allEmails = query.select(u.email).from(u).fetch();
if(allEmails.contains(userinfo.email)){
- return 1;
+ return 1; // 邮箱重复
}
+
+ entitymanager.getTransaction().begin();
entitymanager.persist(userinfo);
- return 0;
+ entitymanager.getTransaction().commit();
+ return 0; // 注册成功
}catch(Exception e){
e.printStackTrace();
+ if (entitymanager.getTransaction().isActive()) {
+ entitymanager.getTransaction().rollback();
+ }
return 2;
}
diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 5152e47..d2d98c7 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -53,6 +53,11 @@
}
@Override
+ public String LoginUser(User userinfo){
+ return null;
+ }
+
+ @Override
public int RegisterUser(User userinfo) {
return 0;
}