feat: migrate app routes and business modules
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import { GENERATION_POEM_STATUS } from '@/services/api/generation-poem-contract.js'
|
||||
|
||||
export { GENERATION_POEM_STATUS }
|
||||
|
||||
// 三个限制逐一对应 GenerationPoemBatchBody:输入总长 26000、单代文字
|
||||
// 最多 50 字符、单批最多 500 个世代,不能再合并成一个含义模糊的“长度”。
|
||||
export const MAX_GENERATION_COUNT = 500
|
||||
export const MAX_GENERATION_TEXT_LENGTH = 50
|
||||
export const MAX_GENERATION_POEM_INPUT_LENGTH = 26000
|
||||
|
||||
const separatorPattern = /[\s,,;;、/|]/u
|
||||
const separatorRunPattern = /[\s,,;;、/|]+/u
|
||||
const forbiddenControlPattern = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/u
|
||||
const codePointLength = (value) => Array.from(value).length
|
||||
|
||||
const normalizeGenerationText = (value) => {
|
||||
const text = String(value ?? '').trim()
|
||||
if (
|
||||
!text ||
|
||||
codePointLength(text) > MAX_GENERATION_TEXT_LENGTH ||
|
||||
forbiddenControlPattern.test(text)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
// 按 OpenAPI 的批量输入规则解析:没有分隔符时每个 Unicode code point 对应
|
||||
// 一代;存在空格、逗号、分号、顿号、斜杠或竖线时,每个分段可包含多字。
|
||||
export const validateGenerationPoemText = (value) => {
|
||||
const input = String(value ?? '')
|
||||
if (!input.trim()) {
|
||||
return Object.freeze({ valid: false, generations: [], message: '请录入字辈内容' })
|
||||
}
|
||||
if (codePointLength(input) > MAX_GENERATION_POEM_INPUT_LENGTH) {
|
||||
return Object.freeze({
|
||||
valid: false,
|
||||
generations: [],
|
||||
message: `字辈输入最多 ${MAX_GENERATION_POEM_INPUT_LENGTH} 个字符`,
|
||||
})
|
||||
}
|
||||
if (forbiddenControlPattern.test(input)) {
|
||||
return Object.freeze({
|
||||
valid: false,
|
||||
generations: [],
|
||||
message: '字辈内容包含不支持的控制字符',
|
||||
})
|
||||
}
|
||||
|
||||
const generations = separatorPattern.test(input)
|
||||
? input.split(separatorRunPattern).map((item) => item.trim()).filter(Boolean)
|
||||
: Array.from(input)
|
||||
if (!generations.length) {
|
||||
return Object.freeze({ valid: false, generations, message: '请录入字辈内容' })
|
||||
}
|
||||
if (generations.length > MAX_GENERATION_COUNT) {
|
||||
return Object.freeze({
|
||||
valid: false,
|
||||
generations,
|
||||
message: `一次最多录入 ${MAX_GENERATION_COUNT} 个世代`,
|
||||
})
|
||||
}
|
||||
if (generations.some((item) => normalizeGenerationText(item) === null)) {
|
||||
return Object.freeze({
|
||||
valid: false,
|
||||
generations,
|
||||
message: `每代字辈文字不能为空且最多 ${MAX_GENERATION_TEXT_LENGTH} 个字符`,
|
||||
})
|
||||
}
|
||||
return Object.freeze({ valid: true, generations, message: '' })
|
||||
}
|
||||
Reference in New Issue
Block a user