添加邀请码注册机制

Change-Id: I1a104074a36564ffb332e928e131af182eb30240
diff --git a/src/main/java/com/pt/constant/Constants.java b/src/main/java/com/pt/constant/Constants.java
index d277ea2..e8cecd3 100644
--- a/src/main/java/com/pt/constant/Constants.java
+++ b/src/main/java/com/pt/constant/Constants.java
@@ -23,4 +23,20 @@
             return value;
         }
     }
+
+    public enum UserLevel {
+        NEWBIE(0),
+        FRESH(1),
+        SENIOR(2),
+        MASTER(3);
+
+        private final int value;
+        UserLevel(int value) {
+            this.value = value;
+        }
+
+        public int getValue() {
+            return value;
+        }
+    }
 }
diff --git a/src/main/java/com/pt/controller/TrackerController.java b/src/main/java/com/pt/controller/TrackerController.java
index 1e0302d..edae09f 100644
--- a/src/main/java/com/pt/controller/TrackerController.java
+++ b/src/main/java/com/pt/controller/TrackerController.java
@@ -10,6 +10,8 @@
 import java.util.Map;
 
 @RestController
+@CrossOrigin(origins = "*")
+@RequestMapping("/api/tracker")
 public class TrackerController {
 
     @Autowired
diff --git a/src/main/java/com/pt/controller/UserController.java b/src/main/java/com/pt/controller/UserController.java
index 7603f9d..577b2a3 100644
--- a/src/main/java/com/pt/controller/UserController.java
+++ b/src/main/java/com/pt/controller/UserController.java
@@ -2,6 +2,7 @@
 
 import com.pt.constant.Constants;
 import com.pt.entity.User;
+import com.pt.service.InvitedCodeService;
 import com.pt.utils.JWTUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -18,6 +19,7 @@
 
     @Autowired
     private UserService userService;
+    private InvitedCodeService invitedCodeService;
 
     @PostMapping("/register")
     public ResponseEntity<?> registerUser(@RequestBody Map<String, String> request) {
@@ -35,6 +37,17 @@
         } else {
             User newUser = new User();
 
+            if(request.get("invitedCode") != null) {
+                String invitedCode = request.get("invitedCode");
+                if (!invitedCodeService.isCodeValid(invitedCode)) {
+                    return ResponseEntity.badRequest().body("Invalid invited code");
+                }
+                else {
+                    newUser.setLevel(Constants.UserLevel.FRESH.getValue());
+                    newUser.setPoints(300);
+                }
+            }
+
             String uid = String.valueOf(System.currentTimeMillis());
             newUser.setUid(uid);
             newUser.setUsername(username);
diff --git a/src/main/java/com/pt/entity/InvitedCode.java b/src/main/java/com/pt/entity/InvitedCode.java
new file mode 100644
index 0000000..33a1cf8
--- /dev/null
+++ b/src/main/java/com/pt/entity/InvitedCode.java
@@ -0,0 +1,35 @@
+package com.pt.entity;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+
+@Entity
+public class InvitedCode {
+
+    @Id
+    private String code;
+
+    private String owner;
+
+    public InvitedCode() {
+    }
+
+    public InvitedCode(String code, String owner) {
+        this.code = code;
+        this.owner = owner;
+    }
+
+    public String getCode() {
+        return code;
+    }
+    public void setCode(String code) {
+        this.code = code;
+    }
+    public String getOwner() {
+        return owner;
+    }
+    public void setOwner(String owner) {
+        this.owner = owner;
+    }
+
+}
diff --git a/src/main/java/com/pt/repository/InvitedCoedRepository.java b/src/main/java/com/pt/repository/InvitedCoedRepository.java
new file mode 100644
index 0000000..5d7a366
--- /dev/null
+++ b/src/main/java/com/pt/repository/InvitedCoedRepository.java
@@ -0,0 +1,15 @@
+package com.pt.repository;
+
+import com.pt.entity.InvitedCode;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface InvitedCoedRepository extends JpaRepository<InvitedCode, String> {
+
+    // Method to find an InvitedCode by its code
+    InvitedCode findByCode(String code);
+
+    // Method to find all InvitedCodes by owner
+    List<InvitedCode> findByOwner(String owner);
+}
diff --git a/src/main/java/com/pt/service/InvitedCodeService.java b/src/main/java/com/pt/service/InvitedCodeService.java
new file mode 100644
index 0000000..cd73452
--- /dev/null
+++ b/src/main/java/com/pt/service/InvitedCodeService.java
@@ -0,0 +1,16 @@
+package com.pt.service;
+
+import com.pt.repository.InvitedCoedRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class InvitedCodeService {
+
+    @Autowired
+    private InvitedCoedRepository invitedCodeRepository;
+
+    public boolean isCodeValid(String code) {
+        return invitedCodeRepository.findByCode(code) != null;
+    }
+}