完善接单平台上传与物品规则

This commit is contained in:
yml2213
2026-07-25 15:56:18 +08:00
parent f6d3f00f21
commit a2587eda01
40 changed files with 4978 additions and 1008 deletions
+57 -5
View File
@@ -45,13 +45,32 @@ export function validateRuntimeConfig(
requireInteger(issues, 'server.port', config.server?.port, { min: 1, max: 65535 })
requireInteger(issues, 'database.maxConnections', config.database?.maxConnections, { min: 1 })
requireInteger(issues, 'storage.maxUploadSizeMb', config.storage?.maxUploadSizeMb, {
min: 1,
max: 100,
})
requireInteger(issues, 'orders.tokenTtlHours', config.orders?.tokenTtlHours, { min: 1 })
requireInteger(issues, 'admin.sessionTtlHours', config.admin?.sessionTtlHours, { min: 1 })
requireInteger(issues, 'platforms.cloudtentacles.timeoutMs', config.platforms?.cloudtentacles?.timeoutMs, { min: 1 })
requireInteger(
issues,
'platforms.cloudtentacles.timeoutMs',
config.platforms?.cloudtentacles?.timeoutMs,
{ min: 1 },
)
if (config.platforms?.kuaishouFeifei) {
requireInteger(issues, 'platforms.kuaishouFeifei.timeoutMs', config.platforms.kuaishouFeifei.timeoutMs, { min: 1 })
requireInteger(
issues,
'platforms.kuaishouFeifei.timeoutMs',
config.platforms.kuaishouFeifei.timeoutMs,
{ min: 1 },
)
}
requireInteger(issues, 'platforms.cloudtentacles.bindUrlTtlSeconds', config.platforms?.cloudtentacles?.bindUrlTtlSeconds, { min: 1 })
requireInteger(
issues,
'platforms.cloudtentacles.bindUrlTtlSeconds',
config.platforms?.cloudtentacles?.bindUrlTtlSeconds,
{ min: 1 },
)
requireInteger(
issues,
'platforms.cloudtentacles.bindUrlProbeIntervalSeconds',
@@ -66,10 +85,18 @@ export function validateRuntimeConfig(
)
validateOptionalHttpUrl(issues, 'orders.claimBaseUrl', config.orders?.claimBaseUrl)
validateOptionalStorageEndpoint(issues, 'storage.endpoint', config.storage?.endpoint)
validateRequiredString(issues, 'data.root', config.data?.root)
if (productionLike) {
validateRequiredString(issues, 'database.url', config.database?.url)
validateRequiredString(issues, 'storage.endpoint', config.storage?.endpoint)
validateOptionalStorageEndpoint(issues, 'storage.endpoint', config.storage?.endpoint)
validateRequiredString(issues, 'storage.bucket', config.storage?.bucket)
validateRequiredString(issues, 'storage.accessKeyId', config.storage?.accessKeyId)
validateSecret(issues, 'storage.secretAccessKey', config.storage?.secretAccessKey, {
minLength: 8,
})
validateRequiredHttpUrl(issues, 'orders.claimBaseUrl', config.orders?.claimBaseUrl)
validateSecret(issues, 'admin.sessionSecret', config.admin?.sessionSecret, { minLength: 32 })
validateAdminDefaultUsers(issues, config.admin?.defaultUsers)
@@ -96,7 +123,9 @@ function validateAdminDefaultUsers(
users.forEach((user, index) => {
validateRequiredString(issues, `admin.defaultUsers[${index}].username`, user?.username)
validateSecret(issues, `admin.defaultUsers[${index}].password`, user?.password, { minLength: 8 })
validateSecret(issues, `admin.defaultUsers[${index}].password`, user?.password, {
minLength: 8,
})
validateRequiredString(issues, `admin.defaultUsers[${index}].role`, user?.role)
})
}
@@ -171,11 +200,34 @@ function validateRequiredHttpUrl(
validateOptionalHttpUrl(issues, configPath, value)
}
function validateOptionalStorageEndpoint(
issues: RuntimeConfigValidationIssue[],
configPath: string,
value: unknown,
): void {
const text = String(value || '').trim()
if (!text) {
return
}
if (/^https?:\/\//i.test(text)) {
validateOptionalHttpUrl(issues, configPath, text)
return
}
if (!/^[a-z0-9.-]+(?::\d{1,5})?$/i.test(text)) {
issues.push({
path: configPath,
message: '必须是 http/https URL 或 host:port',
})
}
}
function requireInteger(
issues: RuntimeConfigValidationIssue[],
configPath: string,
value: unknown,
{ min, max }: { min?: number, max?: number } = {},
{ min, max }: { min?: number; max?: number } = {},
): void {
const numberValue = Number(value)
if (!Number.isInteger(numberValue)) {