数据库维护、安全校验和事务逻辑位于 [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)。
45 lines
1.7 KiB
JavaScript
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 }));
|