feat: 作业纸

This commit is contained in:
R524809
2026-10-23 16:52:47 +08:00
parent 83a90407b0
commit c090675255
14 changed files with 532 additions and 3 deletions
+4
View File
@@ -3,3 +3,7 @@
后续加入 CloudBase 数据导出/导入、七牛文件迁移、关联与计数审计、备份恢复等脚本。
当前未执行任何迁移或外部写入。真实导出、文件和凭证不应提交源码仓库。
### 初始化独立作业纸条目
在工作区根目录运行 `pnpm paper-sheets:seed` 预演,追加 `--apply` 创建缺少的十种纸张草稿。工具仅允许本机 doodle_dev,原 paper-sheet 必须存在;不改写已有条目、旧收藏或历史计数。新条目复用 paper-sheet 绘制器并保存固定 paperType 配置。草稿封面暂借原入口,需在开发版生成各自真实封面后正常发布。详见 [纸张条目设计](../../../docs/v3.5/Worksheet数据库设计说明.md)。
+38
View File
@@ -0,0 +1,38 @@
import 'reflect-metadata';
import { readFileSync } from 'node:fs';
import { createRequire } from 'node:module';
import { parseArgs, parseEnv } from 'node:util';
const require = createRequire(import.meta.url);
const { PrismaService } = require('../dist/database/prisma.service.js');
const { seedPaperSheets } = require('../dist/worksheets/paper-sheet-seed.js');
const { HttpException } = require('@nestjs/common');
let database;
try {
const { values } = parseArgs({
options: { apply: { type: 'boolean', default: false } },
});
const local = parseEnv(
readFileSync(new URL('../.env', import.meta.url), 'utf8'),
);
const url = new URL(process.env.DATABASE_URL ?? local.DATABASE_URL);
// 与现有导入工具一致,仅操作本机开发库;默认预演,不代替内容正式发布。
if (
!['127.0.0.1', 'localhost'].includes(url.hostname) ||
url.pathname !== '/doodle_dev'
)
throw new Error('作业纸初始化只允许本机 doodle_dev');
database = new PrismaService({ databaseUrl: url.toString() });
console.log(
JSON.stringify(await seedPaperSheets(database, !values.apply), null, 4),
);
} catch (error) {
console.error(
error instanceof HttpException
? error.message
: '作业纸初始化失败,请检查本地数据库及构建结果',
);
process.exitCode = 1;
} finally {
await database?.onModuleDestroy();
}