diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 8d919b6..28a8ac5 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -40,6 +40,91 @@
 //     }
 
 //     @Override
+//     public int RegisterUser(User userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int UpdateInformation(User userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public User GetInformation(String userid) {
+//         return null;
+//     }
+
+//     @Override
+//     public UserPT GetInformationPT(String userid) {
+//         return null;
+//     }
+
+//     @Override
+//     public int UpdateInformationPT(UserPT userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int RegisterUserPT(UserPT userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public Seed GetSeedInformation(String seedid) {
+//         return null;
+//     }
+
+//     @Override
+//     public int RegisterSeed(Seed seedinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int UpdateSeed(Seed seedinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public Seed[] SearchSeed(String userQ) {
+//         return new Seed[0];
+//     }
+
+//     @Override
+//     public int AddNotice(Notice notice) {
+//         return 0;
+//     }
+
+//     @Override
+//     public boolean UpdateNotice(Notice notice) {
+//         return false;
+//     }
+
+//     @Override
+//     public boolean DeleteNotice(String noticeid) {
+//         return false;
+//     }
+
+//     @Override
+//     public int GetUserAvailableInviteTimes(String userid) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int InviteUser(String inviterid, String inviteemail) {
+//         return 0;
+//     }
+
+//     @Override
+//     public boolean AddCollect(String userid, String postid) {
+//         return false;
+//     }
+
+//     @Override
+//     public boolean DeleteCollect(String userid, String postid) {
+//         return false;
+//     }
+
+//     @Override
 //     public int AddBegSeed(BegInfo info) {
 //         if (info == null || info.begid == null || info.begid.isEmpty()) {
 //             logger.warn("Invalid parameter: info is null or begid is empty");
@@ -208,13 +293,14 @@
 //             Long voteCount = new JPAQuery<>(em)
 //                     .select(uv.count())
 //                     .from(uv)
-//                     .where(uv.userId.eq(userId)
-//                             .and(uv.begId.eq(begId))
-//                             .and(uv.seedId.eq(seedId)))
+//                     .where(uv.user.userid.eq(userId))
+//                     .where(uv.begInfo.begid.eq(begId))
+//                     .where(uv.seed.seedid.eq(seedId))
 //                     .fetchOne();
 
 //             if (voteCount > 0) {
-//                 logger.warn("User {} has already voted for seed {} in beg {}", userId, seedId, begId);
+//                 logger.warn("User {} has already voted for seed {} in beg {}", userId,
+//                         seedId, begId);
 //                 return 1;
 //             }
 
@@ -278,12 +364,13 @@
 //             Long submitCount = new JPAQuery<>(em)
 //                     .select(ss.count())
 //                     .from(ss)
-//                     .where(ss.begId.eq(begid)
-//                             .and(ss.seedId.eq(seed.seedid)))
+//                     .where(ss.begInfo.begid.eq(begid))
+//                     .where(ss.seed.seedid.eq(seed.seedid))
 //                     .fetchOne();
 
 //             if (submitCount > 0) {
-//                 logger.warn("Seed {} has already been submitted for beg {}", seed.seedid, begid);
+//                 logger.warn("Seed {} has already been submitted for beg {}", seed.seedid,
+//                         begid);
 //                 return 1;
 //             }
 
@@ -338,15 +425,15 @@
 //                 // 2. 查找投票最多的提交任务
 //                 QSubmitSeed ss = QSubmitSeed.submitSeed;
 //                 Tuple topSubmission = new JPAQuery<>(em)
-//                         .select(ss.seedId, ss.votes)
+//                         .select(ss.seed.seedid, ss.votes)
 //                         .from(ss)
-//                         .where(ss.begId.eq(beg.begid))
+//                         .where(ss.begInfo.begid.eq(beg.begid))
 //                         .orderBy(ss.votes.desc())
 //                         .limit(1)
 //                         .fetchOne();
 
 //                 if (topSubmission != null && topSubmission.get(ss.votes) > 0) {
-//                     String seedId = topSubmission.get(ss.seedId);
+//                     String seedId = topSubmission.get(ss.seed.seedid);
 
 //                     // 3. 获取上传者ID
 //                     QSeed s = QSeed.seed;
@@ -374,7 +461,8 @@
 //             }
 
 //             tx.commit();
-//             logger.info("Successfully settled {} expired beg requests", expiredBegs.size());
+//             logger.info("Successfully settled {} expired beg requests",
+//                     expiredBegs.size());
 
 //         } catch (Exception e) {
 //             if (tx != null && tx.isActive()) {
diff --git a/src/main/java/entity/Profile.java b/src/main/java/entity/Profile.java
index 2ff6979..ec330b2 100644
--- a/src/main/java/entity/Profile.java
+++ b/src/main/java/entity/Profile.java
@@ -11,7 +11,7 @@
 
 @Entity
 @Table(name = "UserMigration")
-public class Profile {//迁移信息
+public class Profile {// 迁移信息
     @Id
     @Column(name = "migration_id", length = 64, nullable = false)
     public String profileurl;
@@ -43,4 +43,7 @@
 
     @Transient
     public String downloadgived;
+
+    @Column(name = "application_url", nullable = false)
+    public String applicationurl;
 }
diff --git a/src/main/java/entity/User.java b/src/main/java/entity/User.java
index 69d34ed..d1d67c7 100644
--- a/src/main/java/entity/User.java
+++ b/src/main/java/entity/User.java
@@ -8,50 +8,39 @@
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
 import javax.persistence.Transient;
-
 import com.querydsl.core.annotations.QueryEntity;
 
 @QueryEntity
-@Entity(name="User")
+@Entity(name = "User")
 @Table(name = "User")
 public class User {
     @Id
     @Column(name = "user_id", length = 36, nullable = false)
     public String userid;
-
     @Column(name = "email", nullable = false, length = 255, unique = true)
     public String email;
-
     @Column(name = "username", length = 100, nullable = false)
     public String username;
-
     @Column(name = "password", length = 255, nullable = false)
     public String password;
-
     @Column(name = "gender", nullable = false)
     public String sex;
-
     @Transient
     public String age;
-
     @Column(name = "school")
     public String school;
-
     @Column(name = "avatar_url")
     public String pictureurl;
-
     @Column(name = "bio")
     public String profile;
-
     @Column(name = "account_status", nullable = false)
     public boolean accountstate;
-
     @Column(name = "invite_left", nullable = false)
     public int invitetimes;
-
     @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
     public UserPT userPT;
 
     // Constructors, getters, setters
-    public User() {}
-}
+    public User() {
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index 210b9bf..da92c17 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -1,5 +1,4 @@
 package tracker;
-
 import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -19,10 +18,8 @@
 import entity.config;
 import entity.TTorent;
 import java.time.LocalDateTime;
-
 public class Tracker implements TrackerInterface {
     private final EntityManagerFactory emf;
-
     // 默认构造：产线数据库
     public Tracker() {
         config cfg = new config();
@@ -33,12 +30,10 @@
         props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
         this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
     }
-
     // 测试传入：测试库
     public Tracker(EntityManagerFactory emf) {
         this.emf = emf;
     }
-
     @Override
     public boolean AddUpLoad(String userid, int upload) {
         EntityManager em = emf.createEntityManager();
@@ -60,7 +55,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean ReduceUpLoad(String userid, int upload){
         EntityManager em = emf.createEntityManager();
@@ -82,7 +76,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean AddDownload(String userid, int download) {
         EntityManager em = emf.createEntityManager();
@@ -103,7 +96,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean ReduceDownload(String userid, int download) {
         EntityManager em = emf.createEntityManager();
@@ -124,7 +116,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean AddMagic(String userid, int magic) {
         EntityManager em = emf.createEntityManager();
@@ -145,7 +136,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean ReduceMagic(String userid, int magic) {
         EntityManager em = emf.createEntityManager();
@@ -166,7 +156,6 @@
             em.close();
         }
     }
-
     @Override
     public int SaveTorrent(String seedid, File TTorent){
         try {
@@ -177,7 +166,6 @@
             String filename = TTorent.getName();
             Path target = storageDir.resolve(seedid + "_" + filename);
             Files.copy(TTorent.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
-
             EntityManager em = emf.createEntityManager();
             EntityTransaction tx = em.getTransaction();
             try {
@@ -197,7 +185,6 @@
             return 1;
         }
     }
-
     @Override
     public File GetTTorent(String seedid, String userid, String ip) {
         EntityManager em = emf.createEntityManager();
@@ -230,7 +217,6 @@
         }
         return file;
     }
-
     @Override
     public int AddRecord(TransRecord rd){
         EntityManager em = emf.createEntityManager();
@@ -248,4 +234,4 @@
             em.close();
         }
     }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/tracker/TrackerInterface.java b/src/main/java/tracker/TrackerInterface.java
index 4776d11..eb9d002 100644
--- a/src/main/java/tracker/TrackerInterface.java
+++ b/src/main/java/tracker/TrackerInterface.java
@@ -1,8 +1,8 @@
 package tracker;
 import java.io.File;
 
+import entity.TTorent;
 import entity.TransRecord;
-
 public interface TrackerInterface{
     public boolean AddUpLoad(String userid,int upload);//给用户新增上传量，返回0成功，返回1失败;
     public boolean ReduceUpLoad(String userid,int upload);//给用户减上传量，返回0成功，返回1失败;
