chapter.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import connection from "./base.js";
  2. /*
  3. * `name` VARCHAR(255) NOT NULL, -- Chapter name with a maximum length of 255 characters
  4. `book_id` VARCHAR(100) NOT NULL, -- Book ID with a maximum length of 100 characters
  5. `author_id` VARCHAR(100) NOT NULL, -- Author ID with a maximum length of 100 characters
  6. `content` LONGTEXT DEFAULT NULL, -- Chapter content
  7. `level` INT NULL, -- Level of the chapter, can be NULL
  8. `order_index` INT NULL, -- Order index for sorting chapters, can be NULL
  9. `order_id` VARCHAR(255) NULL, -- Order ID, can be NULL
  10. `old_path` VARCHAR(255) NULL, -- Old path, can be NULL
  11. `path` VARCHAR(255) NULL, -- Current path, can be NULL
  12. * */
  13. export async function chapter_insert({
  14. name = "",
  15. book_id = "",
  16. author_id = "",
  17. content = "",
  18. level = "",
  19. order_index = "",
  20. order_id = "",
  21. old_path = "",
  22. path = "",
  23. parent_id= ''
  24. }) {
  25. // 假设最大长度为255,您可能需要根据实际数据库定义调整
  26. const maxLength = 255;
  27. const sql = `
  28. INSERT INTO chapter (name, book_id, author_id, content, level, order_index, order_id, old_path, path, parent_id)
  29. VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
  30. `;
  31. const values = [
  32. name,
  33. book_id,
  34. author_id,
  35. content,
  36. level,
  37. order_index,
  38. order_id,
  39. old_path,
  40. path,
  41. parent_id
  42. ];
  43. return new Promise((resolve, reject) => {
  44. connection.execute(sql, values, (error, result) => {
  45. if (error) {
  46. console.error("Database error:", error);
  47. return reject(error); // 使用 reject 处理错误
  48. }
  49. resolve(result); // 返回查询结果
  50. });
  51. });
  52. }
  53. /*根据文件路径查询章节数据*/
  54. // select * from files where source_id like '%part0042%'
  55. export async function searchChapterInfoForPath(path, book_id) {
  56. return new Promise((resolve, reject) => {
  57. const query = `
  58. SELECT files.file_id
  59. FROM files
  60. INNER JOIN book_link_file ON files.file_id = book_link_file.file_id
  61. WHERE book_link_file.book_id = ?
  62. AND files.path LIKE ?;`; // 确保 `source_id` 上有索引
  63. // 调整参数顺序以匹配 SQL 中的占位符顺序
  64. const queryParams = [book_id, `%${path}%`];
  65. connection.query(query, queryParams, (err, rows) => {
  66. if (err) {
  67. return reject(err);
  68. }
  69. resolve(rows.length > 0 ? rows[0] : false);
  70. });
  71. });
  72. }
  73. /*获取当前书籍的所有数据*/
  74. export async function getChaptersByBookId(book_id, level = 0, parent_id = '') {
  75. return new Promise((resolve, reject) => {
  76. /*
  77. SELECT files.*, chapter.*
  78. FROM files
  79. INNER JOIN book_link_file ON files.file_id = book_link_file.file_id
  80. INNER JOIN chapter ON files.path like CONCAT('%', chapter.order_id, '%')
  81. WHERE book_link_file.book_id = '28b639bf9362ad3b2cd5a24cb6d811c0'
  82. AND files.mimetype = 'text/html' AND chapter.level = '1';
  83. */
  84. /*const query = `
  85. SELECT files.*, chapter.*
  86. FROM files
  87. INNER JOIN book_link_file ON files.file_id = book_link_file.file_id
  88. INNER JOIN chapter ON files.path LIKE CONCAT('%', chapter.order_id, '%')
  89. WHERE book_link_file.book_id = '${book_id}'
  90. AND files.mimetype = 'text/html' ${level === 10 ? '' : `AND chapter.level = '${level}'`};
  91. `;*/
  92. // SELECT id,name,level,order_id,parent_id,path
  93. const query = `
  94. SELECT *
  95. FROM chapter
  96. WHERE book_id = '${book_id}'
  97. `;
  98. console.log(9292, query)
  99. connection.query(query, [], (err, rows) => {
  100. if (err) {
  101. return reject(err);
  102. }
  103. resolve(rows);
  104. });
  105. });
  106. }
  107. /* 获取当前书籍下一章的file_id */
  108. export async function getChaptersByBookId2(book_id, level = 0, parent_id = '') {
  109. return new Promise((resolve, reject) => {
  110. /*
  111. SELECT files.*, chapter.*
  112. FROM files
  113. INNER JOIN book_link_file ON files.file_id = book_link_file.file_id
  114. INNER JOIN chapter ON files.path like CONCAT('%', chapter.order_id, '%')
  115. WHERE book_link_file.book_id = '28b639bf9362ad3b2cd5a24cb6d811c0'
  116. AND files.mimetype = 'text/html' AND chapter.level = '1';
  117. */
  118. /*const query = `
  119. SELECT files.*, chapter.*
  120. FROM files
  121. INNER JOIN book_link_file ON files.file_id = book_link_file.file_id
  122. INNER JOIN chapter ON files.path LIKE CONCAT('%', chapter.order_id, '%')
  123. WHERE book_link_file.book_id = '${book_id}'
  124. AND files.mimetype = 'text/html' ${level === 10 ? '' : `AND chapter.level = '${level}'`};
  125. `;*/
  126. // SELECT id,name,level,order_id,parent_id,path
  127. const query = `
  128. SELECT *
  129. FROM chapter
  130. WHERE book_id = '${book_id}'
  131. `;
  132. console.log(9292, query)
  133. connection.query(query, [], (err, rows) => {
  134. if (err) {
  135. return reject(err);
  136. }
  137. resolve(rows);
  138. });
  139. });
  140. }