task-h.5.3
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
import {
|
||||
classifyTemplateField,
|
||||
computeFieldDiff,
|
||||
createSqlClient,
|
||||
getEffectiveMappedKeys,
|
||||
extractTemplateFields,
|
||||
@@ -18,11 +20,31 @@ async function main() {
|
||||
|
||||
for (const template of templates) {
|
||||
const fields = extractTemplateFields(template.schemaJson);
|
||||
const previousVersion =
|
||||
(
|
||||
await sql`
|
||||
select schema_json as "schemaJson", version
|
||||
from crm_document_template_versions
|
||||
where template_id = ${template.templateId}
|
||||
and deleted_at is null
|
||||
and id <> ${template.versionId}
|
||||
order by created_at desc
|
||||
limit 1
|
||||
`
|
||||
)[0] ?? null;
|
||||
const previousFields = previousVersion
|
||||
? extractTemplateFields(previousVersion.schemaJson)
|
||||
: [];
|
||||
const { mappings } = await getMappingsForVersion(sql, template.versionId);
|
||||
const fieldNames = new Set(fields.map((field) => field.name).filter(Boolean));
|
||||
const mappedKeys = getEffectiveMappedKeys(fields, mappings);
|
||||
const duplicateFields = getDuplicateFieldNames(fields);
|
||||
const unknownFields = getUnknownFieldNames(fields, mappedKeys);
|
||||
const fieldDiff = computeFieldDiff(fields, previousFields);
|
||||
const requiredTableFields = ['quotation_price_data'];
|
||||
const missingRequiredTableFields = requiredTableFields.filter(
|
||||
(fieldName) => !fields.some((field) => field.name === fieldName && field.type === 'table')
|
||||
);
|
||||
const tableFields = fields.filter((field) => field.type === 'table').map((field) => field.name);
|
||||
const dynamicTopicFields = fields
|
||||
.filter((field) => field.name === 'topic' || field.name === 'data_topic')
|
||||
@@ -39,8 +61,14 @@ async function main() {
|
||||
mapping.placeholderKey !== 'items_table'
|
||||
)
|
||||
.map((mapping) => mapping.placeholderKey);
|
||||
const classifications = fields.map((field) => ({
|
||||
name: field.name,
|
||||
type: field.type,
|
||||
classification: classifyTemplateField(field, mappedKeys)
|
||||
}));
|
||||
const status = summarizeIssues([
|
||||
duplicateFields.length ? 'FAIL' : 'PASS',
|
||||
missingRequiredTableFields.length ? 'FAIL' : 'PASS',
|
||||
missingMappings.length ? 'FAIL' : 'PASS',
|
||||
orphanMappings.length ? 'WARNING' : 'PASS',
|
||||
unknownFields.length ? 'WARNING' : 'PASS'
|
||||
@@ -49,12 +77,17 @@ async function main() {
|
||||
results.push({
|
||||
templateName: template.templateName,
|
||||
version: template.version,
|
||||
previousVersion: previousVersion?.version ?? null,
|
||||
organizationId: template.organizationId,
|
||||
schemaFieldCount: fields.length,
|
||||
tableFields,
|
||||
missingRequiredTableFields,
|
||||
dynamicTopicFields,
|
||||
deletedFields: fieldDiff.deletedFields,
|
||||
newFields: fieldDiff.newFields,
|
||||
duplicateFields,
|
||||
unknownFields,
|
||||
classifications,
|
||||
missingMappings,
|
||||
orphanMappings,
|
||||
mappedFieldCount: mappings.length,
|
||||
|
||||
Reference in New Issue
Block a user