feat: 作业纸
This commit is contained in:
@@ -3,3 +3,7 @@
|
||||
后续加入 CloudBase 数据导出/导入、七牛文件迁移、关联与计数审计、备份恢复等脚本。
|
||||
|
||||
当前未执行任何迁移或外部写入。真实导出、文件和凭证不应提交源码仓库。
|
||||
|
||||
### 初始化独立作业纸条目
|
||||
|
||||
在工作区根目录运行 `pnpm paper-sheets:seed` 预演,追加 `--apply` 创建缺少的十种纸张草稿。工具仅允许本机 doodle_dev,原 paper-sheet 必须存在;不改写已有条目、旧收藏或历史计数。新条目复用 paper-sheet 绘制器并保存固定 paperType 配置。草稿封面暂借原入口,需在开发版生成各自真实封面后正常发布。详见 [纸张条目设计](../../../docs/v3.5/Worksheet数据库设计说明.md)。
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user