配置改为数据库存储

将运行时 JSON 配置迁入 app_config_entries,启动时从文件导入并删除源文件。
This commit is contained in:
yml2213
2026-07-10 09:14:12 +08:00
parent ce01c2aa34
commit 3642ad8aec
20 changed files with 577 additions and 251 deletions
@@ -1,7 +1,11 @@
import path from 'node:path'
import { APP_CONFIG_KEYS } from '../../config/app-config-keys.js'
import { PROJECT_ROOT } from '../../config/runtime.js'
import { readJsonFile, writeJsonFile } from '../../utils/json-file-store.js'
import {
readAppConfigEntry,
saveAppConfigEntry,
} from '../config/app-config-store.js'
const SCHEDULED_JOBS_FILE_PATH = path.join(PROJECT_ROOT, 'data', 'scheduled-jobs.json')
const CLOUDTENTACLES_HEALTH_JOB_ID = 'cloudtentacles-health'
@@ -13,11 +17,21 @@ export function getScheduledJobsFilePath() {
}
export function getScheduledJobsConfig() {
return loadScheduledJobsConfigFromFile()
return readAppConfigEntry({
configKey: APP_CONFIG_KEYS.scheduledJobs,
legacyFilePath: SCHEDULED_JOBS_FILE_PATH,
fallback: createDefaultScheduledJobsConfig,
normalize: normalizeScheduledJobsConfig,
})
}
export function saveScheduledJobsConfig(rawValue: unknown) {
return writeJsonFile(SCHEDULED_JOBS_FILE_PATH, rawValue, normalizeScheduledJobsConfig)
return saveAppConfigEntry({
configKey: APP_CONFIG_KEYS.scheduledJobs,
legacyFilePath: SCHEDULED_JOBS_FILE_PATH,
value: rawValue,
normalize: normalizeScheduledJobsConfig,
})
}
export function getCloudtentaclesHealthJob(config: JsonObject = getScheduledJobsConfig()) {
@@ -26,14 +40,6 @@ export function getCloudtentaclesHealthJob(config: JsonObject = getScheduledJobs
|| createDefaultCloudtentaclesHealthJob()
}
function loadScheduledJobsConfigFromFile() {
return readJsonFile(
SCHEDULED_JOBS_FILE_PATH,
createDefaultScheduledJobsConfig,
normalizeScheduledJobsConfig,
)
}
export function normalizeScheduledJobsConfig(rawValue: unknown) {
const source = isPlainObject(rawValue) ? rawValue : {}
const rawJobs = Array.isArray(source.jobs) ? source.jobs : []