diff --git a/src/main/java/com/pt5/pthouduan/PtHouduanApplication.java b/src/main/java/com/pt5/pthouduan/PtHouduanApplication.java
new file mode 100644
index 0000000..48a1325
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/PtHouduanApplication.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
+
+//@SpringBootApplication
+@SpringBootApplication
+@MapperScan("com.pt5.pthouduan.mapper")
+public class PtHouduanApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(PtHouduanApplication.class, args);
+    }
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/controller/UserController.java b/src/main/java/com/pt5/pthouduan/controller/UserController.java
new file mode 100644
index 0000000..634f07f
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/controller/UserController.java
@@ -0,0 +1,32 @@
+package com.pt5.pthouduan.controller;
+
+import com.pt5.pthouduan.entity.User;
+import com.pt5.pthouduan.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Controller
+@RequestMapping("/user")
+public class UserController {
+    @Autowired
+    private UserService userService;
+
+    // 创建用户
+    @PostMapping("/create")
+    @ResponseBody
+    public User createUser(@RequestBody User user) {
+        return userService.createUser(user);
+    }
+
+
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/Category.java b/src/main/java/com/pt5/pthouduan/entity/Category.java
new file mode 100644
index 0000000..c338fbb
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/Category.java
@@ -0,0 +1,60 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("category")
+public class Category implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("categoryid")
+    private Integer categoryid;
+
+    private Integer categorytype;
+
+    private String categoryName;
+
+    public Integer getCategoryid() {
+        return categoryid;
+    }
+
+    public void setCategoryid(Integer categoryid) {
+        this.categoryid = categoryid;
+    }
+
+    public Integer getCategorytype() {
+        return categorytype;
+    }
+
+    public void setCategorytype(Integer categorytype) {
+        this.categorytype = categorytype;
+    }
+
+    public String getCategoryName() {
+        return categoryName;
+    }
+
+    public void setCategoryName(String categoryName) {
+        this.categoryName = categoryName;
+    }
+
+    @Override
+    public String toString() {
+        return "Category{" +
+        "categoryid = " + categoryid +
+        ", categorytype = " + categorytype +
+        ", categoryName = " + categoryName +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/ChatInformation.java b/src/main/java/com/pt5/pthouduan/entity/ChatInformation.java
new file mode 100644
index 0000000..03ed650
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/ChatInformation.java
@@ -0,0 +1,46 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("chat_information")
+public class ChatInformation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long userid;
+
+    private String chatimformation;
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public String getChatimformation() {
+        return chatimformation;
+    }
+
+    public void setChatimformation(String chatimformation) {
+        this.chatimformation = chatimformation;
+    }
+
+    @Override
+    public String toString() {
+        return "ChatInformation{" +
+        "userid = " + userid +
+        ", chatimformation = " + chatimformation +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/Comment.java b/src/main/java/com/pt5/pthouduan/entity/Comment.java
new file mode 100644
index 0000000..6b96288
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/Comment.java
@@ -0,0 +1,72 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("comment")
+public class Comment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("commentid")
+    private String commentid;
+
+    private Integer postid;
+
+    private String postCommentcontent;
+
+    private LocalDateTime commenttime;
+
+    public String getCommentid() {
+        return commentid;
+    }
+
+    public void setCommentid(String commentid) {
+        this.commentid = commentid;
+    }
+
+    public Integer getPostid() {
+        return postid;
+    }
+
+    public void setPostid(Integer postid) {
+        this.postid = postid;
+    }
+
+    public String getPostCommentcontent() {
+        return postCommentcontent;
+    }
+
+    public void setPostCommentcontent(String postCommentcontent) {
+        this.postCommentcontent = postCommentcontent;
+    }
+
+    public LocalDateTime getCommenttime() {
+        return commenttime;
+    }
+
+    public void setCommenttime(LocalDateTime commenttime) {
+        this.commenttime = commenttime;
+    }
+
+    @Override
+    public String toString() {
+        return "Comment{" +
+        "commentid = " + commentid +
+        ", postid = " + postid +
+        ", postCommentcontent = " + postCommentcontent +
+        ", commenttime = " + commenttime +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/Follower.java b/src/main/java/com/pt5/pthouduan/entity/Follower.java
new file mode 100644
index 0000000..cf97e29
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/Follower.java
@@ -0,0 +1,62 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("follower")
+public class Follower implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("userid")
+    private Long userid;
+
+    //@TableId("Use_userid")
+    private Long useUserid;
+
+    private LocalDateTime followstarttime;
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public Long getUseUserid() {
+        return useUserid;
+    }
+
+    public void setUseUserid(Long useUserid) {
+        this.useUserid = useUserid;
+    }
+
+    public LocalDateTime getFollowstarttime() {
+        return followstarttime;
+    }
+
+    public void setFollowstarttime(LocalDateTime followstarttime) {
+        this.followstarttime = followstarttime;
+    }
+
+    @Override
+    public String toString() {
+        return "Follower{" +
+        "userid = " + userid +
+        ", useUserid = " + useUserid +
+        ", followstarttime = " + followstarttime +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/FriendList.java b/src/main/java/com/pt5/pthouduan/entity/FriendList.java
new file mode 100644
index 0000000..82878c1
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/FriendList.java
@@ -0,0 +1,80 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("friend_list")
+public class FriendList implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long userid;
+
+    private Long friendid;
+
+    private LocalDateTime requesttime;
+
+    private Integer friendType;
+
+    private Integer friendRight;
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public Long getFriendid() {
+        return friendid;
+    }
+
+    public void setFriendid(Long friendid) {
+        this.friendid = friendid;
+    }
+
+    public LocalDateTime getRequesttime() {
+        return requesttime;
+    }
+
+    public void setRequesttime(LocalDateTime requesttime) {
+        this.requesttime = requesttime;
+    }
+
+    public Integer getFriendType() {
+        return friendType;
+    }
+
+    public void setFriendType(Integer friendType) {
+        this.friendType = friendType;
+    }
+
+    public Integer getFriendRight() {
+        return friendRight;
+    }
+
+    public void setFriendRight(Integer friendRight) {
+        this.friendRight = friendRight;
+    }
+
+    @Override
+    public String toString() {
+        return "FriendList{" +
+        "userid = " + userid +
+        ", friendid = " + friendid +
+        ", requesttime = " + requesttime +
+        ", friendType = " + friendType +
+        ", friendRight = " + friendRight +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/FriendsList.java b/src/main/java/com/pt5/pthouduan/entity/FriendsList.java
new file mode 100644
index 0000000..36c164a
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/FriendsList.java
@@ -0,0 +1,94 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 用户好友关系列表
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("friends_list")
+public class FriendsList implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "relation_id", type = IdType.AUTO)
+    private Long relationId;
+
+    private Long userid;
+
+    private Long friendId;
+
+    private LocalDateTime requestTime;
+
+    private String type;
+
+    private String rightLevel;
+
+    public Long getRelationId() {
+        return relationId;
+    }
+
+    public void setRelationId(Long relationId) {
+        this.relationId = relationId;
+    }
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public Long getFriendId() {
+        return friendId;
+    }
+
+    public void setFriendId(Long friendId) {
+        this.friendId = friendId;
+    }
+
+    public LocalDateTime getRequestTime() {
+        return requestTime;
+    }
+
+    public void setRequestTime(LocalDateTime requestTime) {
+        this.requestTime = requestTime;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getRightLevel() {
+        return rightLevel;
+    }
+
+    public void setRightLevel(String rightLevel) {
+        this.rightLevel = rightLevel;
+    }
+
+    @Override
+    public String toString() {
+        return "FriendsList{" +
+        "relationId = " + relationId +
+        ", userid = " + userid +
+        ", friendId = " + friendId +
+        ", requestTime = " + requestTime +
+        ", type = " + type +
+        ", rightLevel = " + rightLevel +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/Invites.java b/src/main/java/com/pt5/pthouduan/entity/Invites.java
new file mode 100644
index 0000000..80f37b4
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/Invites.java
@@ -0,0 +1,82 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("invites")
+public class Invites implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("inviteid")
+    private Long inviteid;
+
+    private Long userid;
+
+    private String invitedUserEmail;
+
+    private String code;
+
+    private Boolean isUsed;
+
+    public Long getInviteid() {
+        return inviteid;
+    }
+
+    public void setInviteid(Long inviteid) {
+        this.inviteid = inviteid;
+    }
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public String getInvitedUserEmail() {
+        return invitedUserEmail;
+    }
+
+    public void setInvitedUserEmail(String invitedUserEmail) {
+        this.invitedUserEmail = invitedUserEmail;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public Boolean getIsUsed() {
+        return isUsed;
+    }
+
+    public void setIsUsed(Boolean isUsed) {
+        this.isUsed = isUsed;
+    }
+
+    @Override
+    public String toString() {
+        return "Invites{" +
+        "inviteid = " + inviteid +
+        ", userid = " + userid +
+        ", invitedUserEmail = " + invitedUserEmail +
+        ", code = " + code +
+        ", isUsed = " + isUsed +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/Marking.java b/src/main/java/com/pt5/pthouduan/entity/Marking.java
new file mode 100644
index 0000000..e549cab
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/Marking.java
@@ -0,0 +1,69 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("marking")
+public class Marking implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long torrentid;
+
+    private Long userid;
+
+    private Integer fiveStarReview;
+
+    private String textualEvaluation;
+
+    public Long getTorrentid() {
+        return torrentid;
+    }
+
+    public void setTorrentid(Long torrentid) {
+        this.torrentid = torrentid;
+    }
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public Integer getFiveStarReview() {
+        return fiveStarReview;
+    }
+
+    public void setFiveStarReview(Integer fiveStarReview) {
+        this.fiveStarReview = fiveStarReview;
+    }
+
+    public String getTextualEvaluation() {
+        return textualEvaluation;
+    }
+
+    public void setTextualEvaluation(String textualEvaluation) {
+        this.textualEvaluation = textualEvaluation;
+    }
+
+    @Override
+    public String toString() {
+        return "Marking{" +
+        "torrentid = " + torrentid +
+        ", userid = " + userid +
+        ", fiveStarReview = " + fiveStarReview +
+        ", textualEvaluation = " + textualEvaluation +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/Post.java b/src/main/java/com/pt5/pthouduan/entity/Post.java
new file mode 100644
index 0000000..d04a601
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/Post.java
@@ -0,0 +1,94 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("post")
+public class Post implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("postid")
+    private Integer postid;
+
+    private Long userid;
+
+    private LocalDateTime updatedTime;
+
+    private Boolean isSticky;
+
+    private String postTitle;
+
+    private LocalDateTime postCreatedTime;
+
+    public Integer getPostid() {
+        return postid;
+    }
+
+    public void setPostid(Integer postid) {
+        this.postid = postid;
+    }
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public LocalDateTime getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(LocalDateTime updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+
+    public Boolean getIsSticky() {
+        return isSticky;
+    }
+
+    public void setIsSticky(Boolean isSticky) {
+        this.isSticky = isSticky;
+    }
+
+    public String getPostTitle() {
+        return postTitle;
+    }
+
+    public void setPostTitle(String postTitle) {
+        this.postTitle = postTitle;
+    }
+
+    public LocalDateTime getPostCreatedTime() {
+        return postCreatedTime;
+    }
+
+    public void setPostCreatedTime(LocalDateTime postCreatedTime) {
+        this.postCreatedTime = postCreatedTime;
+    }
+
+    @Override
+    public String toString() {
+        return "Post{" +
+        "postid = " + postid +
+        ", userid = " + userid +
+        ", updatedTime = " + updatedTime +
+        ", isSticky = " + isSticky +
+        ", postTitle = " + postTitle +
+        ", postCreatedTime = " + postCreatedTime +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/Promotions.java b/src/main/java/com/pt5/pthouduan/entity/Promotions.java
new file mode 100644
index 0000000..248996f
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/Promotions.java
@@ -0,0 +1,83 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("promotions")
+public class Promotions implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("promotionid")
+    private Long promotionid;
+
+    private String promotionDescription;
+
+    private Integer promotionType;
+
+    private LocalDateTime startTime;
+
+    private LocalDateTime endTime;
+
+    public Long getPromotionid() {
+        return promotionid;
+    }
+
+    public void setPromotionid(Long promotionid) {
+        this.promotionid = promotionid;
+    }
+
+    public String getPromotionDescription() {
+        return promotionDescription;
+    }
+
+    public void setPromotionDescription(String promotionDescription) {
+        this.promotionDescription = promotionDescription;
+    }
+
+    public Integer getPromotionType() {
+        return promotionType;
+    }
+
+    public void setPromotionType(Integer promotionType) {
+        this.promotionType = promotionType;
+    }
+
+    public LocalDateTime getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(LocalDateTime startTime) {
+        this.startTime = startTime;
+    }
+
+    public LocalDateTime getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(LocalDateTime endTime) {
+        this.endTime = endTime;
+    }
+
+    @Override
+    public String toString() {
+        return "Promotions{" +
+        "promotionid = " + promotionid +
+        ", promotionDescription = " + promotionDescription +
+        ", promotionType = " + promotionType +
+        ", startTime = " + startTime +
+        ", endTime = " + endTime +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/ResourceAudit.java b/src/main/java/com/pt5/pthouduan/entity/ResourceAudit.java
new file mode 100644
index 0000000..6f6db0a
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/ResourceAudit.java
@@ -0,0 +1,57 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("resource_audit")
+public class ResourceAudit implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long userid;
+
+    private Long torrentid;
+
+    private Integer fiveStarResource;
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public Long getTorrentid() {
+        return torrentid;
+    }
+
+    public void setTorrentid(Long torrentid) {
+        this.torrentid = torrentid;
+    }
+
+    public Integer getFiveStarResource() {
+        return fiveStarResource;
+    }
+
+    public void setFiveStarResource(Integer fiveStarResource) {
+        this.fiveStarResource = fiveStarResource;
+    }
+
+    @Override
+    public String toString() {
+        return "ResourceAudit{" +
+        "userid = " + userid +
+        ", torrentid = " + torrentid +
+        ", fiveStarResource = " + fiveStarResource +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/Torrent.java b/src/main/java/com/pt5/pthouduan/entity/Torrent.java
new file mode 100644
index 0000000..5c85587
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/Torrent.java
@@ -0,0 +1,115 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("torrent")
+public class Torrent implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("torrentid")
+    private Long torrentid;
+
+    private Long promotionid;
+
+    private Integer categoryid;
+
+    private String infoHash;
+
+    private String torrentTitle;
+
+    private String dpi;
+
+    private String caption;
+
+    private byte[] torrentSize;
+
+    public Long getTorrentid() {
+        return torrentid;
+    }
+
+    public void setTorrentid(Long torrentid) {
+        this.torrentid = torrentid;
+    }
+
+    public Long getPromotionid() {
+        return promotionid;
+    }
+
+    public void setPromotionid(Long promotionid) {
+        this.promotionid = promotionid;
+    }
+
+    public Integer getCategoryid() {
+        return categoryid;
+    }
+
+    public void setCategoryid(Integer categoryid) {
+        this.categoryid = categoryid;
+    }
+
+    public String getInfoHash() {
+        return infoHash;
+    }
+
+    public void setInfoHash(String infoHash) {
+        this.infoHash = infoHash;
+    }
+
+    public String getTorrentTitle() {
+        return torrentTitle;
+    }
+
+    public void setTorrentTitle(String torrentTitle) {
+        this.torrentTitle = torrentTitle;
+    }
+
+    public String getDpi() {
+        return dpi;
+    }
+
+    public void setDpi(String dpi) {
+        this.dpi = dpi;
+    }
+
+    public String getCaption() {
+        return caption;
+    }
+
+    public void setCaption(String caption) {
+        this.caption = caption;
+    }
+
+    public byte[] getTorrentSize() {
+        return torrentSize;
+    }
+
+    public void setTorrentSize(byte[] torrentSize) {
+        this.torrentSize = torrentSize;
+    }
+
+    @Override
+    public String toString() {
+        return "Torrent{" +
+        "torrentid = " + torrentid +
+        ", promotionid = " + promotionid +
+        ", categoryid = " + categoryid +
+        ", infoHash = " + infoHash +
+        ", torrentTitle = " + torrentTitle +
+        ", dpi = " + dpi +
+        ", caption = " + caption +
+        ", torrentSize = " + torrentSize +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/TorrentFiles.java b/src/main/java/com/pt5/pthouduan/entity/TorrentFiles.java
new file mode 100644
index 0000000..4a74430
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/TorrentFiles.java
@@ -0,0 +1,70 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("torrent_files")
+public class TorrentFiles implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("torrent_fileid")
+    private Integer torrentFileid;
+
+    private Long torrentid;
+
+    private String path;
+
+    private byte[] torrentfileSize;
+
+    public Integer getTorrentFileid() {
+        return torrentFileid;
+    }
+
+    public void setTorrentFileid(Integer torrentFileid) {
+        this.torrentFileid = torrentFileid;
+    }
+
+    public Long getTorrentid() {
+        return torrentid;
+    }
+
+    public void setTorrentid(Long torrentid) {
+        this.torrentid = torrentid;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public byte[] getTorrentfileSize() {
+        return torrentfileSize;
+    }
+
+    public void setTorrentfileSize(byte[] torrentfileSize) {
+        this.torrentfileSize = torrentfileSize;
+    }
+
+    @Override
+    public String toString() {
+        return "TorrentFiles{" +
+        "torrentFileid = " + torrentFileid +
+        ", torrentid = " + torrentid +
+        ", path = " + path +
+        ", torrentfileSize = " + torrentfileSize +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/User.java b/src/main/java/com/pt5/pthouduan/entity/User.java
new file mode 100644
index 0000000..3a765b8
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/User.java
@@ -0,0 +1,188 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("user")
+public class User implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String username;
+
+    private String password;
+
+    private Integer userUpload;
+
+    private Long userDownload;
+
+    private Integer credit;
+
+    private String image;
+
+    private String sex;
+
+    @TableId("userid")
+    private Long userid;
+
+    private Integer gradeId;
+
+    private String passkey;
+
+    private LocalDateTime userCreatedTime;
+
+    private Double ratio;
+
+    private Integer age;
+
+    private Integer privacy;
+
+    // 构造函数
+    public User(Long id, String name) {
+        this.userid = id;
+        this.username = name;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public Integer getUserUpload() {
+        return userUpload;
+    }
+
+    public void setUserUpload(Integer userUpload) {
+        this.userUpload = userUpload;
+    }
+
+    public Long getUserDownload() {
+        return userDownload;
+    }
+
+    public void setUserDownload(Long userDownload) {
+        this.userDownload = userDownload;
+    }
+
+    public Integer getCredit() {
+        return credit;
+    }
+
+    public void setCredit(Integer credit) {
+        this.credit = credit;
+    }
+
+    public String getImage() {
+        return image;
+    }
+
+    public void setImage(String image) {
+        this.image = image;
+    }
+
+    public String getSex() {
+        return sex;
+    }
+
+    public void setSex(String sex) {
+        this.sex = sex;
+    }
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public Integer getGradeId() {
+        return gradeId;
+    }
+
+    public void setGradeId(Integer gradeId) {
+        this.gradeId = gradeId;
+    }
+
+    public String getPasskey() {
+        return passkey;
+    }
+
+    public void setPasskey(String passkey) {
+        this.passkey = passkey;
+    }
+
+    public LocalDateTime getUserCreatedTime() {
+        return userCreatedTime;
+    }
+
+    public void setUserCreatedTime(LocalDateTime userCreatedTime) {
+        this.userCreatedTime = userCreatedTime;
+    }
+
+    public Double getRatio() {
+        return ratio;
+    }
+
+    public void setRatio(Double ratio) {
+        this.ratio = ratio;
+    }
+
+    public Integer getAge() {
+        return age;
+    }
+
+    public void setAge(Integer age) {
+        this.age = age;
+    }
+
+    public Integer getPrivacy() {
+        return privacy;
+    }
+
+    public void setPrivacy(Integer privacy) {
+        this.privacy = privacy;
+    }
+
+    @Override
+    public String toString() {
+        return "User{" +
+        "username = " + username +
+        ", password = " + password +
+        ", userUpload = " + userUpload +
+        ", userDownload = " + userDownload +
+        ", credit = " + credit +
+        ", image = " + image +
+        ", sex = " + sex +
+        ", userid = " + userid +
+        ", gradeId = " + gradeId +
+        ", passkey = " + passkey +
+        ", userCreatedTime = " + userCreatedTime +
+        ", ratio = " + ratio +
+        ", age = " + age +
+        ", privacy = " + privacy +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/UserGrade.java b/src/main/java/com/pt5/pthouduan/entity/UserGrade.java
new file mode 100644
index 0000000..0b8c176
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/UserGrade.java
@@ -0,0 +1,81 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("user_grade")
+public class UserGrade implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("grade_id")
+    private Integer gradeId;
+
+    private String gradeName;
+
+    private Double minRatio;
+
+    private Integer gradetype;
+
+    private Integer privilege;
+
+    public Integer getGradeId() {
+        return gradeId;
+    }
+
+    public void setGradeId(Integer gradeId) {
+        this.gradeId = gradeId;
+    }
+
+    public String getGradeName() {
+        return gradeName;
+    }
+
+    public void setGradeName(String gradeName) {
+        this.gradeName = gradeName;
+    }
+
+    public Double getMinRatio() {
+        return minRatio;
+    }
+
+    public void setMinRatio(Double minRatio) {
+        this.minRatio = minRatio;
+    }
+
+    public Integer getGradetype() {
+        return gradetype;
+    }
+
+    public void setGradetype(Integer gradetype) {
+        this.gradetype = gradetype;
+    }
+
+    public Integer getPrivilege() {
+        return privilege;
+    }
+
+    public void setPrivilege(Integer privilege) {
+        this.privilege = privilege;
+    }
+
+    @Override
+    public String toString() {
+        return "UserGrade{" +
+        "gradeId = " + gradeId +
+        ", gradeName = " + gradeName +
+        ", minRatio = " + minRatio +
+        ", gradetype = " + gradetype +
+        ", privilege = " + privilege +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/UserTorrents.java b/src/main/java/com/pt5/pthouduan/entity/UserTorrents.java
new file mode 100644
index 0000000..694acb5
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/UserTorrents.java
@@ -0,0 +1,127 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@TableName("user_torrents")
+public class UserTorrents implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("userid")
+    private Long userid;
+
+   // @TableId("torrentid")
+    private Long torrentid;
+
+    private Long uploaded;
+
+    private Long remaining;
+
+    private Boolean isSeeder;
+
+    private Boolean isLeecher;
+
+    private Boolean completed;
+
+    private LocalDateTime lastAction;
+
+    private Long userTorrentDownload;
+
+    public Long getUserid() {
+        return userid;
+    }
+
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    public Long getTorrentid() {
+        return torrentid;
+    }
+
+    public void setTorrentid(Long torrentid) {
+        this.torrentid = torrentid;
+    }
+
+    public Long getUploaded() {
+        return uploaded;
+    }
+
+    public void setUploaded(Long uploaded) {
+        this.uploaded = uploaded;
+    }
+
+    public Long getRemaining() {
+        return remaining;
+    }
+
+    public void setRemaining(Long remaining) {
+        this.remaining = remaining;
+    }
+
+    public Boolean getIsSeeder() {
+        return isSeeder;
+    }
+
+    public void setIsSeeder(Boolean isSeeder) {
+        this.isSeeder = isSeeder;
+    }
+
+    public Boolean getIsLeecher() {
+        return isLeecher;
+    }
+
+    public void setIsLeecher(Boolean isLeecher) {
+        this.isLeecher = isLeecher;
+    }
+
+    public Boolean getCompleted() {
+        return completed;
+    }
+
+    public void setCompleted(Boolean completed) {
+        this.completed = completed;
+    }
+
+    public LocalDateTime getLastAction() {
+        return lastAction;
+    }
+
+    public void setLastAction(LocalDateTime lastAction) {
+        this.lastAction = lastAction;
+    }
+
+    public Long getUserTorrentDownload() {
+        return userTorrentDownload;
+    }
+
+    public void setUserTorrentDownload(Long userTorrentDownload) {
+        this.userTorrentDownload = userTorrentDownload;
+    }
+
+    @Override
+    public String toString() {
+        return "UserTorrents{" +
+        "userid = " + userid +
+        ", torrentid = " + torrentid +
+        ", uploaded = " + uploaded +
+        ", remaining = " + remaining +
+        ", isSeeder = " + isSeeder +
+        ", isLeecher = " + isLeecher +
+        ", completed = " + completed +
+        ", lastAction = " + lastAction +
+        ", userTorrentDownload = " + userTorrentDownload +
+        "}";
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/CategoryMapper.java b/src/main/java/com/pt5/pthouduan/mapper/CategoryMapper.java
new file mode 100644
index 0000000..fac2a81
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/CategoryMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.Category;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface CategoryMapper extends BaseMapper<Category> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/ChatInformationMapper.java b/src/main/java/com/pt5/pthouduan/mapper/ChatInformationMapper.java
new file mode 100644
index 0000000..f410562
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/ChatInformationMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.ChatInformation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface ChatInformationMapper extends BaseMapper<ChatInformation> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/CommentMapper.java b/src/main/java/com/pt5/pthouduan/mapper/CommentMapper.java
new file mode 100644
index 0000000..755a2b5
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/CommentMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.Comment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface CommentMapper extends BaseMapper<Comment> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/FollowerMapper.java b/src/main/java/com/pt5/pthouduan/mapper/FollowerMapper.java
new file mode 100644
index 0000000..f748871
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/FollowerMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.Follower;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface FollowerMapper extends BaseMapper<Follower> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/FriendListMapper.java b/src/main/java/com/pt5/pthouduan/mapper/FriendListMapper.java
new file mode 100644
index 0000000..f2a9863
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/FriendListMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.FriendList;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface FriendListMapper extends BaseMapper<FriendList> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/FriendsListMapper.java b/src/main/java/com/pt5/pthouduan/mapper/FriendsListMapper.java
new file mode 100644
index 0000000..a6d5b56
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/FriendsListMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.FriendsList;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 用户好友关系列表 Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface FriendsListMapper extends BaseMapper<FriendsList> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/InvitesMapper.java b/src/main/java/com/pt5/pthouduan/mapper/InvitesMapper.java
new file mode 100644
index 0000000..6cc278b
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/InvitesMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.Invites;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface InvitesMapper extends BaseMapper<Invites> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/MarkingMapper.java b/src/main/java/com/pt5/pthouduan/mapper/MarkingMapper.java
new file mode 100644
index 0000000..69b5f92
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/MarkingMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.Marking;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface MarkingMapper extends BaseMapper<Marking> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/PostMapper.java b/src/main/java/com/pt5/pthouduan/mapper/PostMapper.java
new file mode 100644
index 0000000..817e555
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/PostMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.Post;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface PostMapper extends BaseMapper<Post> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/PromotionsMapper.java b/src/main/java/com/pt5/pthouduan/mapper/PromotionsMapper.java
new file mode 100644
index 0000000..c69109c
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/PromotionsMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.Promotions;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface PromotionsMapper extends BaseMapper<Promotions> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/ResourceAuditMapper.java b/src/main/java/com/pt5/pthouduan/mapper/ResourceAuditMapper.java
new file mode 100644
index 0000000..30ebc3f
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/ResourceAuditMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.ResourceAudit;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface ResourceAuditMapper extends BaseMapper<ResourceAudit> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/TorrentFilesMapper.java b/src/main/java/com/pt5/pthouduan/mapper/TorrentFilesMapper.java
new file mode 100644
index 0000000..f1ed305
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/TorrentFilesMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.TorrentFiles;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface TorrentFilesMapper extends BaseMapper<TorrentFiles> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/TorrentMapper.java b/src/main/java/com/pt5/pthouduan/mapper/TorrentMapper.java
new file mode 100644
index 0000000..9c7b608
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/TorrentMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.Torrent;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface TorrentMapper extends BaseMapper<Torrent> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/UserGradeMapper.java b/src/main/java/com/pt5/pthouduan/mapper/UserGradeMapper.java
new file mode 100644
index 0000000..aebef5a
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/UserGradeMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.UserGrade;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface UserGradeMapper extends BaseMapper<UserGrade> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/UserMapper.java b/src/main/java/com/pt5/pthouduan/mapper/UserMapper.java
new file mode 100644
index 0000000..8a250f0
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/UserMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.User;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface UserMapper extends BaseMapper<User> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/UserTorrentsMapper.java b/src/main/java/com/pt5/pthouduan/mapper/UserTorrentsMapper.java
new file mode 100644
index 0000000..3137e03
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/UserTorrentsMapper.java
@@ -0,0 +1,18 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.UserTorrents;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Mapper
+public interface UserTorrentsMapper extends BaseMapper<UserTorrents> {
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/CategoryMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/CategoryMapper.xml
new file mode 100644
index 0000000..8b2f365
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/CategoryMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.CategoryMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.Category">
+        <id column="categoryid" property="categoryid" />
+        <result column="categorytype" property="categorytype" />
+        <result column="category_name" property="categoryName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        categoryid, categorytype, category_name
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/ChatInformationMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/ChatInformationMapper.xml
new file mode 100644
index 0000000..5c4b784
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/ChatInformationMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.ChatInformationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.ChatInformation">
+        <result column="userid" property="userid" />
+        <result column="chatimformation" property="chatimformation" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        userid, chatimformation
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/CommentMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/CommentMapper.xml
new file mode 100644
index 0000000..6dcbe17
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/CommentMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.CommentMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.Comment">
+        <id column="commentid" property="commentid" />
+        <result column="postid" property="postid" />
+        <result column="post_commentcontent" property="postCommentcontent" />
+        <result column="commenttime" property="commenttime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        commentid, postid, post_commentcontent, commenttime
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/FollowerMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/FollowerMapper.xml
new file mode 100644
index 0000000..bf7987f
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/FollowerMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.FollowerMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.Follower">
+        <id column="userid" property="userid" />
+        <id column="Use_userid" property="useUserid" />
+        <result column="followstarttime" property="followstarttime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        userid, Use_userid, followstarttime
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/FriendListMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/FriendListMapper.xml
new file mode 100644
index 0000000..225fd54
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/FriendListMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.FriendListMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.FriendList">
+        <result column="userid" property="userid" />
+        <result column="friendid" property="friendid" />
+        <result column="requesttime" property="requesttime" />
+        <result column="friend_type" property="friendType" />
+        <result column="friend_right" property="friendRight" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        userid, friendid, requesttime, friend_type, friend_right
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/FriendsListMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/FriendsListMapper.xml
new file mode 100644
index 0000000..6d8ff4b
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/FriendsListMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.FriendsListMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.FriendsList">
+        <id column="relation_id" property="relationId" />
+        <result column="userid" property="userid" />
+        <result column="friend_id" property="friendId" />
+        <result column="request_time" property="requestTime" />
+        <result column="type" property="type" />
+        <result column="right_level" property="rightLevel" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        relation_id, userid, friend_id, request_time, type, right_level
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/InvitesMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/InvitesMapper.xml
new file mode 100644
index 0000000..3f94012
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/InvitesMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.InvitesMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.Invites">
+        <id column="inviteid" property="inviteid" />
+        <result column="userid" property="userid" />
+        <result column="invited_user_email" property="invitedUserEmail" />
+        <result column="code" property="code" />
+        <result column="is_used" property="isUsed" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        inviteid, userid, invited_user_email, code, is_used
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/MarkingMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/MarkingMapper.xml
new file mode 100644
index 0000000..9730285
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/MarkingMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.MarkingMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.Marking">
+        <result column="torrentid" property="torrentid" />
+        <result column="userid" property="userid" />
+        <result column="Five_star_review" property="fiveStarReview" />
+        <result column="textual_evaluation" property="textualEvaluation" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        torrentid, userid, Five_star_review, textual_evaluation
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/PostMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/PostMapper.xml
new file mode 100644
index 0000000..2c61be7
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/PostMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.PostMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.Post">
+        <id column="postid" property="postid" />
+        <result column="userid" property="userid" />
+        <result column="updated_time" property="updatedTime" />
+        <result column="is_sticky" property="isSticky" />
+        <result column="post_title" property="postTitle" />
+        <result column="post_created_time" property="postCreatedTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        postid, userid, updated_time, is_sticky, post_title, post_created_time
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/PromotionsMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/PromotionsMapper.xml
new file mode 100644
index 0000000..7fe626d
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/PromotionsMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.PromotionsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.Promotions">
+        <id column="promotionid" property="promotionid" />
+        <result column="promotion_description" property="promotionDescription" />
+        <result column="promotion_type" property="promotionType" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        promotionid, promotion_description, promotion_type, start_time, end_time
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/ResourceAuditMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/ResourceAuditMapper.xml
new file mode 100644
index 0000000..945d232
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/ResourceAuditMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.ResourceAuditMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.ResourceAudit">
+        <result column="userid" property="userid" />
+        <result column="torrentid" property="torrentid" />
+        <result column="five_star_resource" property="fiveStarResource" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        userid, torrentid, five_star_resource
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/TorrentFilesMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/TorrentFilesMapper.xml
new file mode 100644
index 0000000..8a59d7e
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/TorrentFilesMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.TorrentFilesMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.TorrentFiles">
+        <id column="torrent_fileid" property="torrentFileid" />
+        <result column="torrentid" property="torrentid" />
+        <result column="path" property="path" />
+        <result column="torrentfile_size" property="torrentfileSize" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        torrent_fileid, torrentid, path, torrentfile_size
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/TorrentMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/TorrentMapper.xml
new file mode 100644
index 0000000..0b6a643
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/TorrentMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.TorrentMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.Torrent">
+        <id column="torrentid" property="torrentid" />
+        <result column="promotionid" property="promotionid" />
+        <result column="categoryid" property="categoryid" />
+        <result column="info_hash" property="infoHash" />
+        <result column="torrent_title" property="torrentTitle" />
+        <result column="dpi" property="dpi" />
+        <result column="caption" property="caption" />
+        <result column="torrent_size" property="torrentSize" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        torrentid, promotionid, categoryid, info_hash, torrent_title, dpi, caption, torrent_size
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/UserGradeMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/UserGradeMapper.xml
new file mode 100644
index 0000000..a379c44
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/UserGradeMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.UserGradeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.UserGrade">
+        <id column="grade_id" property="gradeId" />
+        <result column="grade_name" property="gradeName" />
+        <result column="min_ratio" property="minRatio" />
+        <result column="gradetype" property="gradetype" />
+        <result column="privilege" property="privilege" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        grade_id, grade_name, min_ratio, gradetype, privilege
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/UserMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/UserMapper.xml
new file mode 100644
index 0000000..32d22ca
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/UserMapper.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.UserMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.User">
+        <id column="userid" property="userid" />
+        <result column="username" property="username" />
+        <result column="password" property="password" />
+        <result column="user_upload" property="userUpload" />
+        <result column="user_download" property="userDownload" />
+        <result column="credit" property="credit" />
+        <result column="image" property="image" />
+        <result column="sex" property="sex" />
+        <result column="grade_id" property="gradeId" />
+        <result column="passkey" property="passkey" />
+        <result column="user_created_time" property="userCreatedTime" />
+        <result column="ratio" property="ratio" />
+        <result column="age" property="age" />
+        <result column="privacy" property="privacy" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        username, password, user_upload, user_download, credit, image, sex, userid, grade_id, passkey, user_created_time, ratio, age, privacy
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/mapper/xml/UserTorrentsMapper.xml b/src/main/java/com/pt5/pthouduan/mapper/xml/UserTorrentsMapper.xml
new file mode 100644
index 0000000..8884dcc
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/xml/UserTorrentsMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pt5.pthouduan.mapper.UserTorrentsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.pt5.pthouduan.entity.UserTorrents">
+        <id column="userid" property="userid" />
+        <id column="torrentid" property="torrentid" />
+        <result column="uploaded" property="uploaded" />
+        <result column="remaining" property="remaining" />
+        <result column="is_seeder" property="isSeeder" />
+        <result column="is_leecher" property="isLeecher" />
+        <result column="completed" property="completed" />
+        <result column="last_action" property="lastAction" />
+        <result column="user_torrent_download" property="userTorrentDownload" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        userid, torrentid, uploaded, remaining, is_seeder, is_leecher, completed, last_action, user_torrent_download
+    </sql>
+
+</mapper>
diff --git a/src/main/java/com/pt5/pthouduan/service/UserService.java b/src/main/java/com/pt5/pthouduan/service/UserService.java
new file mode 100644
index 0000000..1a14ad1
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/service/UserService.java
@@ -0,0 +1,20 @@
+package com.pt5.pthouduan.service;
+
+import com.pt5.pthouduan.entity.User;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+public interface UserService{
+    // 根据ID获取用户
+    // 创建用户
+    User createUser(User user);
+
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/service/impl/UserServiceImpl.java b/src/main/java/com/pt5/pthouduan/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000..4811fe5
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/service/impl/UserServiceImpl.java
@@ -0,0 +1,26 @@
+package com.pt5.pthouduan.service.impl;
+
+import com.pt5.pthouduan.entity.User;
+import com.pt5.pthouduan.mapper.UserMapper;
+import com.pt5.pthouduan.service.UserService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author ljx
+ * @since 2025-04-14
+ */
+@Service
+public class UserServiceImpl implements UserService {
+    @Override
+    public User createUser(User user) {
+        // 模拟创建用户
+        return user;
+    }
+
+
+}
