修改创建分区返回问题

Change-Id: I305e417430c795b602bffd6053e4ed1ec86f3733
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 80617de..fc892f7 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
@@ -1,9 +1,14 @@
 package edu.bjtu.groupone.backend.api;
 
 import edu.bjtu.groupone.backend.domain.dto.CategoryDTO;
+import edu.bjtu.groupone.backend.domain.dto.CategoryCreateRequest;
 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.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -24,15 +29,34 @@
     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("分区创建成功");
+    @Operation(
+        summary = "创建新分区",
+        description = "创建一个新的分区,返回创建的分区ID",
+        responses = {
+            @ApiResponse(
+                responseCode = "200",
+                description = "创建成功",
+                content = @Content(schema = @Schema(implementation = Long.class))
+            ),
+            @ApiResponse(responseCode = "400", description = "请求参数错误")
+        }
+    )
+    public ResponseEntity<Long> createCategory(
+        @Parameter(description = "分区信息", required = true)
+        @RequestBody CategoryCreateRequest request
+    ) {
+        Category category = new Category();
+        category.setName(request.getName());
+        if (request.getParentId() != null) {
+            Category parent = new Category();
+            parent.setId(request.getParentId());
+            category.setParent(parent);
+        }
+        return ResponseEntity.ok(categoryService.addCategory(category));
     }
 
-    // 删除分区
     @DeleteMapping("/{id}")
     @Operation(summary = "删除分区")
     public ResponseEntity<String> deleteCategory(@PathVariable Long id) {
@@ -40,7 +64,6 @@
         return ResponseEntity.ok("分区删除成功");
     }
 
-    // 更新分区
     @PutMapping("/{id}")
     @Operation(summary = "更新分区信息")
     public ResponseEntity<String> updateCategory(@PathVariable Long id, @RequestBody Category category) {
@@ -49,7 +72,6 @@
         return ResponseEntity.ok("分区更新成功");
     }
 
-    // 获取单个分区
     @GetMapping("/{id}")
     @Operation(summary = "获取分区详情")
     public ResponseEntity<Category> getCategory(@PathVariable Long id) {
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 28cd43d..b181916 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
@@ -6,7 +6,9 @@
 import edu.bjtu.groupone.backend.domain.entity.Work;
 import edu.bjtu.groupone.backend.domain.entity.Version;
 import edu.bjtu.groupone.backend.domain.entity.Comment;
+import edu.bjtu.groupone.backend.domain.entity.Category;
 import edu.bjtu.groupone.backend.service.WorkService;
+import edu.bjtu.groupone.backend.utils.AliOSSUtils;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Content;
@@ -18,7 +20,9 @@
 import org.springframework.data.domain.Page;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 
 @RestController
@@ -29,6 +33,9 @@
     @Autowired
     private WorkService workService;
 
+    @Autowired
+    private AliOSSUtils aliOSSUtils;
+
     @GetMapping
     @Operation(summary = "获取作品列表", description = "可按分区分页查询作品")
     public ResponseEntity<Page<WorkResponse>> getWorks(
@@ -62,8 +69,26 @@
 
     @PostMapping
     @Operation(summary = "创建新作品")
-    public ResponseEntity<Integer> createWork(@RequestBody Work work) {
-        return ResponseEntity.ok(workService.createWork(work));
+    public ResponseEntity<Integer> createWork(
+            @RequestParam("cover") MultipartFile cover,
+            @RequestParam("title") String title,
+            @RequestParam("author") String author,
+            @RequestParam("categoryId") Long categoryId,
+            @RequestParam("description") String description) {
+        try {
+            String coverUrl = aliOSSUtils.upload(cover);
+            Work work = new Work();
+            work.setTitle(title);
+            work.setAuthor(author);
+            work.setDescription(description);
+            work.setCover(coverUrl);
+            Category category = new Category();
+            category.setId(categoryId);
+            work.setCategory(category);
+            return ResponseEntity.ok(workService.createWork(work));
+        } catch (IOException e) {
+            return ResponseEntity.badRequest().build();
+        }
     }
 
     @PutMapping("/{id}")
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/dto/CategoryCreateRequest.java b/src/main/java/edu/bjtu/groupone/backend/domain/dto/CategoryCreateRequest.java
new file mode 100644
index 0000000..ce14551
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/dto/CategoryCreateRequest.java
@@ -0,0 +1,15 @@
+package edu.bjtu.groupone.backend.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@Schema(description = "创建分区的请求DTO")
+public class CategoryCreateRequest {
+    
+    @Schema(description = "分区名称", example = "文学艺术", required = true)
+    private String name;
+    
+    @Schema(description = "父分区ID,如果是一级分区则为null", example = "1")
+    private Long parentId;
+} 
\ No newline at end of file
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 c6383c0..1d2b089 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
@@ -6,22 +6,29 @@
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.v3.oas.annotations.media.Schema;
 import java.util.ArrayList;
 import java.util.List;
 
 @Entity
 @Table(name = "categories")
 @Data
-@NoArgsConstructor  // 添加无参构造器注解
+@NoArgsConstructor
 @AllArgsConstructor
 @Builder
 @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(description = "分区实体")
 public class Category {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Schema(description = "分区ID", example = "1")
     private Long id;
 
     @Column(nullable = false, length = 50)
+    @Schema(description = "分区名称", example = "文学艺术", required = true)
     private String name;
 
     @ManyToOne(fetch = FetchType.LAZY)
@@ -29,7 +36,8 @@
             name = "parent_id",
             foreignKey = @ForeignKey(name = "fk_category_parent")
     )
-    @JsonIgnoreProperties("children")
+    @JsonIgnoreProperties({"children", "parent"})
+    @Schema(description = "父分区")
     private Category parent;
 
     @OneToMany(
@@ -38,6 +46,7 @@
             orphanRemoval = true
     )
     @Builder.Default
+    @JsonIgnore
     private List<Category> children = new ArrayList<>();
 
     // 修复后的构造器确保 children 被初始化
@@ -48,6 +57,12 @@
         this.children = new ArrayList<>();  // 关键修复:初始化 children
     }
 
+    public Category(String name, Category parent) {
+        this.name = name;
+        this.parent = parent;
+        this.children = new ArrayList<>();
+    }
+
     public void addChild(Category child) {
         children.add(child);
         child.setParent(this);
diff --git a/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java b/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java
index 7ee8ebb..d827ed5 100644
--- a/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java
+++ b/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java
@@ -35,7 +35,8 @@
                 url.startsWith("/swagger-ui/") ||
                 url.startsWith("/v3/api-docs/") ||
                 url.startsWith("/favicon.ico") ||
-                url.startsWith("/static/")) {
+                url.startsWith("/static/") ||
+                url.startsWith("/api/category")) {  // 放行分区相关接口
             return true;
         }
         // 从请求头读取 token
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 d29b298..4955c49 100644
--- a/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
@@ -12,7 +12,7 @@
     List<Category> findByParentId(Long parentId);
     List<Category> findAll();
     // 新增
-    @Insert("INSERT INTO categories(name, parent_id) VALUES(#{name}, #{parent.id})")
+    @Insert("INSERT INTO categories(name, parent_id) VALUES(#{name}, #{parent.id,jdbcType=BIGINT})")
     @Options(useGeneratedKeys = true, keyProperty = "id")
     void insert(Category category);
 
@@ -21,7 +21,7 @@
     void deleteById(Long id);
 
     // 更新
-    @Update("UPDATE categories SET name=#{name}, parent_id=#{parent.id} WHERE id=#{id}")
+    @Update("UPDATE categories SET name=#{name}, parent_id=#{parent.id,jdbcType=BIGINT} WHERE id=#{id}")
     void update(Category category);
 
     // 查询
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 db78bda..b054d05 100644
--- a/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
+++ b/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
@@ -39,8 +39,9 @@
         }
     }
 
-    public void addCategory(Category category) {
+    public Long addCategory(Category category) {
         categoryMybatisMapper.insert(category);
+        return category.getId();
     }
 
     public void deleteCategory(Long id) {