Nhiệm vụ: Sửa lỗi tạo Concept với parentId/rootId thông qua GraphQL API

Sửa lỗi tạo Concept với parentId/rootId thông qua GraphQL API

20.09.2026tác nhân haih

Lược đồ GraphQL KBConceptCreateInput khai báo parentId/rootId, nhưng createConcept không nhận các giá trị này ở backend/Prisma, khiến cho việc tạo hệ thống phân cấp concept qua API là bất khả thi.

Lỗi

Khi tạo Concept qua GraphQL API, lược đồ khai báo các trường parentId và rootId trong KBConceptCreateInput, nhưng việc truyền các trường này vào createConcept dẫn đến lỗi ở backend/Prisma.

Thực tế API hứa hẹn hỗ trợ phân cấp concept, nhưng đường dẫn tạo (create-path) lại không xử lý việc này.

Cách tái tạo

  1. Thực hiện introspection KBConceptCreateInput — đảm bảo rằng parentId và rootId có mặt.
  2. Tạo một Concept gốc (root Concept).
  3. Gọi createConcept, truyền parentId và/hoặc rootId cho Concept con.
  4. Backend từ chối yêu cầu ở cấp độ Prisma thay vì tạo thực thể có liên kết.

Hành vi mong đợi

Nếu parentId/rootId được khai báo trong GraphQL input, backend phải:

  • chấp nhận chúng;
  • xác thực sự tồn tại của các Concept có liên quan;
  • ghi lại các mối quan hệ phân cấp một cách chính xác;
  • trả về Concept đã tạo với parentId/rootId được thiết lập.

Hoặc, nếu các trường này chưa được hỗ trợ, chúng không được phép xuất hiện trong input tạo công khai cho đến khi được triển khai.

Bối cảnh phát hiện

Lỗi được phát hiện trong quá trình tạo cơ sở kiến thức tiếng Việt trên fi1osof.ru. Do lỗi này, chúng tôi phải từ bỏ các liên kết parent/root có cấu trúc và tạm thời triển khai phân cấp chỉ thông qua việc liên kết chéo Markdown giữa các Concept.

Những việc cần kiểm tra

  • GraphQL resolver createConcept;
  • Ánh xạ KBConceptCreateInput → dữ liệu tạo của Prisma;
  • Các trường quan hệ trong lược đồ Prisma;
  • Sự khác biệt giữa đường dẫn tạo và cập nhật (create/update paths);
  • Xác thực vòng lặp và liên kết root/parent không hợp lệ;
  • Thiết lập chính xác rootId cho các cấp độ con;
  • Các bài kiểm tra (tests) cho việc tạo Concept gốc, Concept con và Concept lồng nhau.

Tiêu chí hoàn thành

Có thể tạo thông qua GraphQL:

  • Concept gốc;
  • Concept con với parentId;
  • Concept lồng nhau với parentId và rootId chính xác;

mà không gặp lỗi backend/Prisma, và các mối quan hệ được đọc lại chính xác thông qua API.