diff --git a/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java b/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
index eb87513..a9b7b9d 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
@@ -1,6 +1,7 @@
 package edu.bjtu.groupone.backend.api;
 
 import edu.bjtu.groupone.backend.domain.dto.CategoryDTO;
+import edu.bjtu.groupone.backend.domain.entity.Category;
 import edu.bjtu.groupone.backend.service.CategoryService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -23,4 +24,35 @@
     public ResponseEntity<List<CategoryDTO>> getCategories() {
         return ResponseEntity.ok(categoryService.getCategoryTree());
     }
+    // 创建分区
+    @PostMapping
+    @Operation(summary = "创建新分区")
+    public ResponseEntity<String> createCategory(@RequestBody Category category) {
+        categoryService.addCategory(category);
+        return ResponseEntity.ok("分区创建成功");
+    }
+
+    // 删除分区
+    @DeleteMapping("/{id}")
+    @Operation(summary = "删除分区")
+    public ResponseEntity<String> deleteCategory(@PathVariable Long id) {
+        categoryService.deleteCategory(id);
+        return ResponseEntity.ok("分区删除成功");
+    }
+
+    // 更新分区
+    @PutMapping("/{id}")
+    @Operation(summary = "更新分区信息")
+    public ResponseEntity<String> updateCategory(@PathVariable Long id, @RequestBody Category category) {
+        category.setId(id);
+        categoryService.updateCategory(category);
+        return ResponseEntity.ok("分区更新成功");
+    }
+
+    // 获取单个分区
+    @GetMapping("/{id}")
+    @Operation(summary = "获取分区详情")
+    public ResponseEntity<Category> getCategory(@PathVariable Long id) {
+        return ResponseEntity.ok(categoryService.getCategoryById(id));
+    }
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/api/UserController.java b/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
index 4c08711..1e2746f 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
@@ -20,6 +20,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 @CrossOrigin
 @Tag(name = "用户相关接口") //输入http://localhost:8080/swagger-ui/index.html或http://localhost:8080/v3/api-docs/可查看接口文档
@@ -294,4 +295,34 @@
         );
         return Result.success(info);
     }
+
+    @DeleteMapping("/{userId}")
+    @Operation(summary = "删除用户")
+    public Result<String> deleteUser(@PathVariable int userId) {
+        userService.deleteUser(userId);
+        return Result.success("用户删除成功"); // 修改为中文
+    }
+
+    @PutMapping("/{userId}")
+    @Operation(summary = "更新用户信息")
+    public Result<String> updateUser(@PathVariable int userId, @RequestBody User user) {
+        user.setUserId(userId);
+        userService.updateUser(user);
+        return Result.success("用户信息更新成功"); // 修改为中文
+    }
+
+    // 用户查询
+    @GetMapping("/{userId}")
+    @Operation(summary = "获取用户信息")
+    public Result<User> getUser(@PathVariable int userId) {
+        User user = userService.getUserById(userId);
+        return Result.success(user);
+    }
+
+    // 所有用户查询
+    @GetMapping("/all")
+    @Operation(summary = "获取所有用户")
+    public Result<List<User>> getAllUsers() {
+        return Result.success(userService.getAllUsers());
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java b/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
index a56d1cd..1eb4bee 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
@@ -1,6 +1,7 @@
 package edu.bjtu.groupone.backend.api;
 
 import edu.bjtu.groupone.backend.domain.dto.WorkResponse;
+import edu.bjtu.groupone.backend.domain.entity.Work;
 import edu.bjtu.groupone.backend.service.WorkService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -26,4 +27,34 @@
             @Parameter(description = "每页数量", example = "20") @RequestParam(defaultValue = "20") int size) {
         return ResponseEntity.ok(workService.getWorks(categoryId, page, size));
     }
+    @PostMapping
+    @Operation(summary = "创建新作品")
+    public ResponseEntity<String> createWork(@RequestBody Work work) {
+        workService.addWork(work);
+        return ResponseEntity.ok("作品创建成功");
+    }
+
+    // 删除作品
+    @DeleteMapping("/{id}")
+    @Operation(summary = "删除作品")
+    public ResponseEntity<String> deleteWork(@PathVariable Long id) {
+        workService.deleteWork(id);
+        return ResponseEntity.ok("作品删除成功");
+    }
+
+    // 更新作品
+    @PutMapping("/{id}")
+    @Operation(summary = "更新作品信息")
+    public ResponseEntity<String> updateWork(@PathVariable Long id, @RequestBody Work work) {
+        work.setId(id);
+        workService.updateWork(work);
+        return ResponseEntity.ok("作品更新成功");
+    }
+
+    // 获取单个作品
+    @GetMapping("/{id}")
+    @Operation(summary = "获取作品详情")
+    public ResponseEntity<Work> getWork(@PathVariable Long id) {
+        return ResponseEntity.ok(workService.getWorkById(id));
+    }
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/config/PaginationConfig.java b/src/main/java/edu/bjtu/groupone/backend/config/PaginationConfig.java
index e8261dd..0857376 100644
--- a/src/main/java/edu/bjtu/groupone/backend/config/PaginationConfig.java
+++ b/src/main/java/edu/bjtu/groupone/backend/config/PaginationConfig.java
@@ -1,10 +1,13 @@
+// PaginationConfig.java
 package edu.bjtu.groupone.backend.config;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
 import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
 
 @Configuration
+@Profile("!test")
 public class PaginationConfig {
     @Bean
     public PageableHandlerMethodArgumentResolver pageableResolver() {
@@ -13,4 +16,4 @@
         resolver.setMaxPageSize(100);            // 限制最大每页数量
         return resolver;
     }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/dto/WorkResponse.java b/src/main/java/edu/bjtu/groupone/backend/domain/dto/WorkResponse.java
index bdc15e1..b6b49f8 100644
--- a/src/main/java/edu/bjtu/groupone/backend/domain/dto/WorkResponse.java
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/dto/WorkResponse.java
@@ -23,4 +23,10 @@
 
     @Schema(description = "所属分区 ID", example = "1")
     private Long categoryId;
+
+    @Schema(description = "作品描述", example = "一部关于...")
+    private String description;
+
+    @Schema(description = "创建时间", example = "2023-06-15")
+    private String createTime;
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java
index de02aab..c6383c0 100644
--- a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java
@@ -10,27 +10,26 @@
 import java.util.List;
 
 @Entity
-@Table(name = "categories") // 显式指定表名
-@Data // 自动生成 getter/setter/toString
-@NoArgsConstructor // JPA 要求无参构造
-@AllArgsConstructor // 全参构造
-@Builder // 支持 Builder 模式
-@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) // 解决 Jackson 序列化问题
-
+@Table(name = "categories")
+@Data
+@NoArgsConstructor  // 添加无参构造器注解
+@AllArgsConstructor
+@Builder
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
 public class Category {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
-    @Column(nullable = false, length = 50) // 数据库字段约束
+    @Column(nullable = false, length = 50)
     private String name;
 
-    @ManyToOne(fetch = FetchType.LAZY) // 推荐懒加载
+    @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(
             name = "parent_id",
             foreignKey = @ForeignKey(name = "fk_category_parent")
     )
-    @JsonIgnoreProperties("children") // 避免双向循环序列化
+    @JsonIgnoreProperties("children")
     private Category parent;
 
     @OneToMany(
@@ -38,10 +37,17 @@
             cascade = CascadeType.ALL,
             orphanRemoval = true
     )
-    @Builder.Default // 保证 Lombok Builder 初始化集合
+    @Builder.Default
     private List<Category> children = new ArrayList<>();
 
-    // 双向关联辅助方法
+    // 修复后的构造器确保 children 被初始化
+    public Category(Long id, String name, Category parent) {
+        this.id = id;
+        this.name = name;
+        this.parent = parent;
+        this.children = new ArrayList<>();  // 关键修复：初始化 children
+    }
+
     public void addChild(Category child) {
         children.add(child);
         child.setParent(this);
@@ -51,9 +57,4 @@
         children.remove(child);
         child.setParent(null);
     }
-    public Category(Long id, String name, Category parent) {
-        this.id = id;
-        this.name = name;
-        this.parent = parent;
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Work.java b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Work.java
index 55e036b..ca3b365 100644
--- a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Work.java
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Work.java
@@ -29,4 +29,9 @@
             foreignKey = @ForeignKey(name = "fk_work_category")
     )
     private Category category;
+    @Column(columnDefinition = "TEXT")
+    private String description;
+
+    @Column(name = "create_time")
+    private String createTime;
 }
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
index 42bb6af..d29b298 100644
--- a/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
@@ -1,6 +1,7 @@
 package edu.bjtu.groupone.backend.mapper;
 
 import edu.bjtu.groupone.backend.domain.entity.Category;
+import org.apache.ibatis.annotations.*;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
@@ -10,4 +11,20 @@
 public interface CategoryMybatisMapper {
     List<Category> findByParentId(Long parentId);
     List<Category> findAll();
+    // 新增
+    @Insert("INSERT INTO categories(name, parent_id) VALUES(#{name}, #{parent.id})")
+    @Options(useGeneratedKeys = true, keyProperty = "id")
+    void insert(Category category);
+
+    // 删除
+    @Delete("DELETE FROM categories WHERE id = #{id}")
+    void deleteById(Long id);
+
+    // 更新
+    @Update("UPDATE categories SET name=#{name}, parent_id=#{parent.id} WHERE id=#{id}")
+    void update(Category category);
+
+    // 查询
+    @Select("SELECT * FROM categories WHERE id = #{id}")
+    Category findById(Long id);
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/UserMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/UserMapper.java
index 8f0044d..3e14ee4 100644
--- a/src/main/java/edu/bjtu/groupone/backend/mapper/UserMapper.java
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/UserMapper.java
@@ -4,14 +4,20 @@
 import edu.bjtu.groupone.backend.domain.entity.User;
 import org.apache.ibatis.annotations.*;
 
+import java.util.List;
+
 @Mapper
 public interface UserMapper {
-     @Select("select * from user where email=#{email} and password=#{password}")
+
+    @Select("select * from user where email=#{email} and password=#{password}")
      User login(User user);
 
      @Select("SELECT * FROM user WHERE username = #{username}")
     User selectByUsername(String username);
 
+    @Select("SELECT * FROM user WHERE user_id = #{userId}")
+    User selectUserById(int userId);
+
     @Select("SELECT * FROM user WHERE email = #{email}")
     User selectByEmail(String email);
 
@@ -26,4 +32,14 @@
 
     @Select("SELECT COUNT(*) FROM user WHERE identification_number = #{identificationNumber}")
     int countByIdentificationNumber(int identificationNumber);
+
+    @Delete("DELETE FROM user WHERE user_id = #{userId}")
+    int deleteUser(int userId);
+
+    @Update("UPDATE user SET username=#{username}, email=#{email}, password=#{password}, " +
+            "identification_number=#{identificationNumber} WHERE user_id=#{userId}")
+    int updateUser(User user);
+
+    @Select("SELECT * FROM user")
+    List<User> selectAllUsers();
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java
index a3485d7..90836a8 100644
--- a/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java
@@ -3,6 +3,7 @@
 
 //import edu.bjtu.groupone.backend.model.Work;
 import edu.bjtu.groupone.backend.domain.entity.Work;
+import org.apache.ibatis.annotations.*;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable; // 正确导入
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -14,4 +15,23 @@
 public interface WorkMybatisMapper  {
     // 修正参数类型为 Spring Data 的 Pageable
     Page<Work> findByCategoryIdIn(List<Long> categoryIds, Pageable pageable);
+    @Insert("INSERT INTO works(title, author, views, category_id, description, create_time) " +
+            "VALUES(#{title}, #{author}, #{views}, #{category.id}, #{description}, #{createTime})")
+    @Options(useGeneratedKeys = true, keyProperty = "id")
+    void save(Work work);
+
+    // 删除
+    @Delete("DELETE FROM works WHERE id = #{id}")
+    void deleteById(Long id);
+
+    // 更新
+    @Update("UPDATE works SET title=#{title}, author=#{author}, " +
+            "views=#{views}, category_id=#{category.id}, " +
+            "description=#{description}, create_time=#{createTime} " +
+            "WHERE id=#{id}")
+    void update(Work work);
+
+    // 查询
+    @Select("SELECT * FROM works WHERE id = #{id}")
+    Work findById(Long id);
 }
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java b/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
index 7b745c1..db78bda 100644
--- a/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
+++ b/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
@@ -39,4 +39,19 @@
         }
     }
 
+    public void addCategory(Category category) {
+        categoryMybatisMapper.insert(category);
+    }
+
+    public void deleteCategory(Long id) {
+        categoryMybatisMapper.deleteById(id);
+    }
+
+    public void updateCategory(Category category) {
+        categoryMybatisMapper.update(category);
+    }
+
+    public Category getCategoryById(Long id) {
+        return categoryMybatisMapper.findById(id);
+    }
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/UserService.java b/src/main/java/edu/bjtu/groupone/backend/service/UserService.java
index be8877d..867aead 100644
--- a/src/main/java/edu/bjtu/groupone/backend/service/UserService.java
+++ b/src/main/java/edu/bjtu/groupone/backend/service/UserService.java
@@ -3,6 +3,8 @@
 
 import edu.bjtu.groupone.backend.domain.entity.User;
 
+import java.util.List;
+
 public interface UserService {
     User login(User user);
     boolean isUsernameExists(String username);
@@ -14,4 +16,9 @@
     // 新增重置密码相关
     void sendResetCode(String email);
     boolean resetPassword(String email, String code, String newPassword);
+    // 新增方法
+    void deleteUser(int userId);
+    void updateUser(User user);
+    User getUserById(int userId);
+    List<User> getAllUsers();
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java b/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java
index f3b58af..ec0494f 100644
--- a/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java
+++ b/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java
@@ -10,6 +10,8 @@
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 @Service
@@ -33,7 +35,30 @@
                 work.getTitle(),
                 work.getAuthor(),
                 work.getViews(),
-                work.getCategory().getId()
+                work.getCategory().getId(),
+                work.getDescription(),   // 新增字段
+                work.getCreateTime()
         );
     }
+
+    public void addWork(Work work) {
+        work.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
+        workMybatisMapper.save(work);
+    }
+
+    public void deleteWork(Long id) {
+        workMybatisMapper.deleteById(id);
+    }
+
+    public void updateWork(Work work) {
+        Work existing = workMybatisMapper.findById(work.getId());
+        if (existing != null) {
+            work.setCreateTime(existing.getCreateTime());
+        }
+        workMybatisMapper.update(work);
+    }
+
+    public Work getWorkById(Long id) {
+        return workMybatisMapper.findById(id);
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/impl/UserServImpl.java b/src/main/java/edu/bjtu/groupone/backend/service/impl/UserServImpl.java
index aa113cd..82593f7 100644
--- a/src/main/java/edu/bjtu/groupone/backend/service/impl/UserServImpl.java
+++ b/src/main/java/edu/bjtu/groupone/backend/service/impl/UserServImpl.java
@@ -9,6 +9,7 @@
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.List;
 import java.util.Random;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -124,4 +125,23 @@
                 : "user";
         return "user_" + prefix + "_" + String.format("%04d", new Random().nextInt(10000));
     }
+    @Override
+    public void deleteUser(int userId) {
+        userMapper.deleteUser(userId);
+    }
+
+    @Override
+    public void updateUser(User user) {
+        userMapper.updateUser(user);
+    }
+
+    @Override
+    public User getUserById(int userId) {
+        return userMapper.selectUserById(userId);
+    }
+
+    @Override
+    public List<User> getAllUsers() {
+        return userMapper.selectAllUsers();
+    }
 }
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index beb0cc7..a36d6ea 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -7,25 +7,25 @@
                         `address` VARCHAR(255),
                         `role` VARCHAR(50) NOT NULL DEFAULT 'user',
                         `profile_pic` VARCHAR(255),
-                        `registration_date` DATETIME NOT NULL,
+                        `registration_date` TIMESTAMP NOT NULL,
                         `identification_number` VARCHAR(18),
                         `avatar` VARCHAR(255),
                         `isfollowed` BOOLEAN NOT NULL DEFAULT FALSE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+);
 
 -- 外键表同样使用反引号
-CREATE TABLE user_follow (
-                             `follower_id` INT NOT NULL,
-                             `followed_id` INT NOT NULL,
-                             `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-                             PRIMARY KEY (`follower_id`, `followed_id`),
-                             FOREIGN KEY (`follower_id`) REFERENCES `user`(`user_id`),
-                             FOREIGN KEY (`followed_id`) REFERENCES `user`(`user_id`)
+CREATE TABLE `user_follow` (
+                               `follower_id` INT NOT NULL,
+                               `followed_id` INT NOT NULL,
+                               `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+                               PRIMARY KEY (`follower_id`, `followed_id`),
+                               FOREIGN KEY (`follower_id`) REFERENCES `user`(`user_id`),
+                               FOREIGN KEY (`followed_id`) REFERENCES `user`(`user_id`)
 );
 
 -- 插入语句使用反引号包裹表名和列名
 INSERT INTO `user` (
     `username`, `email`, `password`, `registration_date`, `identification_number`, `role`
 ) VALUES (
-             'admin', 'admin@example.com', 'admin123', NOW(), '87654321', 'admin'
+             'admin', 'admin@example.com', 'admin123', CURRENT_TIMESTAMP, '87654321', 'admin'
          );
\ No newline at end of file
