Files
EIS-dotnet/scripts/export-dotnet-demo-seed.mjs
T
biss f3ffc18aae 新增 [Eis.Tools (line 1)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Tools/Program.cs:1),支持 database init/reset/seed。
数据库维护、安全校验和事务逻辑位于 [DatabaseMaintenanceService.cs (line 1)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Data/DatabaseMaintenanceService.cs:1)。
内置完整演示数据:1200 名考生、10800 条成绩、2404 条招生记录。
删除旧 import-test-data.mjs 和 reset-dev-database.mjs 运行入口。
Docker 镜像同时包含 Web 和 /app/tools/Eis.Tools.dll。
[package.json (line 11)](C:/Users/BI/Documents/EIS-dotnet/package.json:11) 原数据库命令已改为调用 .NET。
新增统一发布脚本:[publish.ps1 (line 1)](C:/Users/BI/Documents/EIS-dotnet/scripts/publish.ps1:1)。
2026-07-23 16:25:40 +08:00

45 lines
1.7 KiB
JavaScript

import { pbkdf2Sync } from 'node:crypto';
import { writeFile } from 'node:fs/promises';
import { fileURLToPath } from 'node:url';
import { dirname, join, resolve } from 'node:path';
import { gzipSync } from 'node:zlib';
import { buildSeedOperations } from '../database.mjs';
import { createSeedDatabase } from '../src/data/seed.mjs';
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
const outputPath = join(root, 'src', 'Eis.Infrastructure', 'Data', 'demo-seed-operations.json.gz');
const generatedAt = '2026-07-23T00:00:00.000Z';
const deterministicSalt = 'eis-dotnet-demo-seed';
const hashPassword = password => {
const hash = pbkdf2Sync(password, deterministicSalt, 120000, 32, 'sha256').toString('hex');
return `${deterministicSalt}:${hash}`;
};
const database = createSeedDatabase({
nowIso: () => generatedAt,
hashPassword
});
database.meta.version = 20;
const operations = buildSeedOperations(database);
const payload = {
version: 1,
schemaVersion: 20,
generatedAt,
summary: {
schools: database.schools.length,
users: database.users.length,
candidates: database.candidateProfiles.length,
registrations: database.registrations.length,
results: database.results.length,
admissionRecords: database.admissionRecords.length,
firstRoundPreferences: database.admissionRecords.filter(
item => item.kind === 'preference' && Number(item.payload?.round || 1) === 1
).length,
operations: operations.length
},
operations
};
const compressed = gzipSync(Buffer.from(JSON.stringify(payload)), { level: 9 });
await writeFile(outputPath, compressed);
console.log(JSON.stringify({ outputPath, compressedBytes: compressed.length, ...payload.summary }));