| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- const { PrismaClient } = require('@prisma/client');
- const prisma = new PrismaClient();
- async function checkBook() {
- const book = await prisma.book.findUnique({
- where: { id: 1 },
- include: {
- chapters: {
- orderBy: [
- { level: 'asc' },
- { parentId: 'asc' },
- { number: 'asc' }
- ]
- }
- }
- });
- if (!book) {
- console.log('书籍不存在');
- return;
- }
- console.log('=== 书籍信息 ===');
- console.log('ID:', book.id);
- console.log('标题:', book.title);
- console.log('状态:', book.status);
- console.log('进度:', book.progress + '%');
- console.log('总章节数:', book.totalChapters);
- console.log('预估字数:', book.estimatedWords);
- console.log('');
- console.log('=== 大纲结构 (JSON) ===');
- if (book.outlineJson) {
- const outline = JSON.parse(book.outlineJson);
- console.log('主题:', outline.mainTheme);
- console.log('结构逻辑:', outline.structureLogic);
- console.log('章数:', outline.chapters.length);
-
- // 检查是否有节和小节
- outline.chapters.forEach((ch, idx) => {
- console.log(` 第${idx + 1}章: ${ch.title}`);
- if (ch.sections && ch.sections.length > 0) {
- console.log(` 节数: ${ch.sections.length}`);
- ch.sections.forEach((sec, sIdx) => {
- console.log(` 第${sIdx + 1}节: ${sec.title}`);
- if (sec.subsections && sec.subsections.length > 0) {
- console.log(` 小节数: ${sec.subsections.length}`);
- } else {
- console.log(` ⚠️ 缺少小节`);
- }
- });
- } else {
- console.log(` ⚠️ 缺少节`);
- }
- });
- } else {
- console.log('⚠️ 无大纲数据');
- }
- console.log('');
- console.log('=== 数据库章节统计 ===');
- const level1 = book.chapters.filter(c => c.level === 1).length;
- const level2 = book.chapters.filter(c => c.level === 2).length;
- const level3 = book.chapters.filter(c => c.level === 3).length;
- console.log('一级(章):', level1);
- console.log('二级(节):', level2);
- console.log('三级(小节):', level3);
- console.log('总计:', book.chapters.length);
- console.log('');
- console.log('=== 章节详细结构 ===');
- book.chapters.forEach(c => {
- const indent = ' '.repeat(c.level - 1);
- const status = c.status || 'pending';
- console.log(`${indent}L${c.level} #${c.number} ${c.title} [${status}] (ID:${c.id}, Parent:${c.parentId || 'null'})`);
- });
- await prisma.$disconnect();
- }
- checkBook().catch(console.error);
|