数据库脚本修正
This commit is contained in:
1 parent
607b71e4f0
commit
b443015943
7 files changed
+20
-40
No files matched your search
@@ -159,7 +159,7 @@ git push origin v1.3.0-rc.1
|
|||||||
|
|
||||||
首次成功推送后,容器镜像会出现在 `biss` 所有者的软件包列表。Gitea 的软件包归属于用户或组织,不会天然归属于某个仓库;打开该软件包的设置页面,将它关联到 `Exam-Information-System`,即可让它显示在此仓库的“软件包”页。之后可使用 `docker pull git.biss.click/biss/exam-information-system:latest` 拉取。
|
首次成功推送后,容器镜像会出现在 `biss` 所有者的软件包列表。Gitea 的软件包归属于用户或组织,不会天然归属于某个仓库;打开该软件包的设置页面,将它关联到 `Exam-Information-System`,即可让它显示在此仓库的“软件包”页。之后可使用 `docker pull git.biss.click/biss/exam-information-system:latest` 拉取。
|
||||||
|
|
||||||
需要清空并重建空业务库时运行 `npm run reset-db`。需要测试数据时再手动运行 `npm run seed-test-data`;导入脚本会读取项目根目录的 `.env`,并根据 `DATABASE_CLIENT` 选择 SQLite 或 MySQL。它会生成 4 所学校、360 名批量考生及 360 条不同状态的报名数据,并明确不生成考场编排计划和准考证。省市区县下拉数据位于 `src/data/china-regions.mjs`,当前版本为国家地名信息库截至 2025-12-31 的三级快照,并补入和康县(653228)与和安县(653229);从新版 CSV 更新时可运行 `node scripts/build-regions.mjs <CSV路径> src/data/china-regions.mjs`。
|
需要清空并重建空业务库时运行 `npm run reset-db`;该命令与 `npm run initialize-system` 使用同一套初始化流程,会读取项目根目录的 `.env`,并根据 `DATABASE_CLIENT` 选择 SQLite 或 MySQL。也可通过 `npm run reset-db -- --sqlite` 或 `npm run reset-db -- --mysql` 显式选择数据库;MySQL 中存在无法识别为样例数据的业务记录时仍会拒绝覆盖,只有确认目标可清空后才能追加 `--force`。需要测试数据时再手动运行 `npm run seed-test-data`;导入脚本会生成 5 所学校、1200 名批量考生及对应的不同状态报名数据。省市区县下拉数据位于 `src/data/china-regions.mjs`,当前版本为国家地名信息库截至 2025-12-31 的三级快照,并补入和康县(653228)与和安县(653229);从新版 CSV 更新时可运行 `node scripts/build-regions.mjs <CSV路径> src/data/china-regions.mjs`。
|
||||||
|
|
||||||
## 数据库配置
|
## 数据库配置
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -3,6 +3,7 @@ import { dirname, join, resolve } from 'node:path';
|
|||||||
import { mysqlSchema, sqliteSchema } from './src/database/schema.mjs';
|
import { mysqlSchema, sqliteSchema } from './src/database/schema.mjs';
|
||||||
import { createSqliteAdapter } from './src/database/sqlite-adapter.mjs';
|
import { createSqliteAdapter } from './src/database/sqlite-adapter.mjs';
|
||||||
import { createMysqlAdapter } from './src/database/mysql-adapter.mjs';
|
import { createMysqlAdapter } from './src/database/mysql-adapter.mjs';
|
||||||
|
import { CURRENT_SCHEMA_VERSION } from './src/database/version.mjs';
|
||||||
|
|
||||||
export const relationalTables = [
|
export const relationalTables = [
|
||||||
'schema_metadata',
|
'schema_metadata',
|
||||||
@@ -60,7 +61,7 @@ export function buildSeedOperations(state) {
|
|||||||
const nullable = value => value == null || value === '' ? null : value;
|
const nullable = value => value == null || value === '' ? null : value;
|
||||||
|
|
||||||
add(
|
add(
|
||||||
'UPDATE schema_metadata SET schema_version = 20, app_version = ?, self_registration_enabled = ?, created_at = ? WHERE id = 1',
|
`UPDATE schema_metadata SET schema_version = ${CURRENT_SCHEMA_VERSION}, app_version = ?, self_registration_enabled = ?, created_at = ? WHERE id = 1`,
|
||||||
Number(state.meta?.version || 1), state.settings?.selfRegistrationEnabled ? 1 : 0,
|
Number(state.meta?.version || 1), state.settings?.selfRegistrationEnabled ? 1 : 0,
|
||||||
state.meta?.createdAt || new Date().toISOString()
|
state.meta?.createdAt || new Date().toISOString()
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { loadEnvFile } from 'node:process';
|
|||||||
import { buildSeedOperations, createDatabase, relationalTables } from '../database.mjs';
|
import { buildSeedOperations, createDatabase, relationalTables } from '../database.mjs';
|
||||||
import { createBaseDatabase } from '../src/data/base.mjs';
|
import { createBaseDatabase } from '../src/data/base.mjs';
|
||||||
import { createSeedDatabase } from '../src/data/seed.mjs';
|
import { createSeedDatabase } from '../src/data/seed.mjs';
|
||||||
|
import { CURRENT_SCHEMA_VERSION } from '../src/database/version.mjs';
|
||||||
|
|
||||||
const root = resolve(process.cwd());
|
const root = resolve(process.cwd());
|
||||||
const envPath = join(root, '.env');
|
const envPath = join(root, '.env');
|
||||||
@@ -101,8 +102,8 @@ async function prepareMysql() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const [metadataRows] = await connection.query('SELECT schema_version FROM schema_metadata WHERE id = 1');
|
const [metadataRows] = await connection.query('SELECT schema_version FROM schema_metadata WHERE id = 1');
|
||||||
if (Number(metadataRows[0]?.schema_version) !== 16) {
|
if (Number(metadataRows[0]?.schema_version) !== CURRENT_SCHEMA_VERSION) {
|
||||||
throw new Error(`MySQL 数据库结构版本不是 v16(当前 ${metadataRows[0]?.schema_version ?? '未知'}),请先完成结构初始化`);
|
throw new Error(`MySQL 数据库结构版本不是 v${CURRENT_SCHEMA_VERSION}(当前 ${metadataRows[0]?.schema_version ?? '未知'}),请先完成结构初始化`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const [examPartitionRows] = await connection.query(
|
const [examPartitionRows] = await connection.query(
|
||||||
|
|||||||
Loaded 3 of 7 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user