Ver Fonte

fix(report): preserve report id precision

Developer há 1 mês atrás
pai
commit
21121cbb56

+ 4 - 7
pagesHome/components/createList.vue

@@ -129,16 +129,13 @@ const { backgroundIntroUrl } = backgroundSurveyRules
 
 
 function extractReportId(payload) {
 function extractReportId(payload) {
 	if (payload === null || payload === undefined) return undefined
 	if (payload === null || payload === undefined) return undefined
-	if (typeof payload === 'number') return payload
-	if (typeof payload === 'string') {
-		const numeric = Number(payload)
-		return Number.isNaN(numeric) ? undefined : numeric
-	}
+	if (typeof payload === 'number') return Number.isFinite(payload) ? String(payload) : undefined
+	if (typeof payload === 'string') return payload
 	if (typeof payload !== 'object') return undefined
 	if (typeof payload !== 'object') return undefined
 	const direct = payload.reportId ?? payload.id
 	const direct = payload.reportId ?? payload.id
 	if (direct !== undefined && direct !== null && direct !== '') {
 	if (direct !== undefined && direct !== null && direct !== '') {
-		const numeric = Number(direct)
-		return Number.isNaN(numeric) ? undefined : numeric
+		if (typeof direct === 'string') return direct
+		return typeof direct === 'number' && Number.isFinite(direct) ? String(direct) : undefined
 	}
 	}
 	for (const key of ['data', 'dto', 'info']) {
 	for (const key of ['data', 'dto', 'info']) {
 		const nested = extractReportId(payload[key])
 		const nested = extractReportId(payload[key])

+ 9 - 3
pagesHome/reportResult.vue

@@ -35,12 +35,18 @@
 		return Number.isNaN(numeric) ? undefined : numeric
 		return Number.isNaN(numeric) ? undefined : numeric
 	}
 	}
 
 
+	function toReportId(value) {
+		if (value === '' || value === null || value === undefined) return undefined
+		if (typeof value === 'string') return value
+		if (typeof value === 'number' && Number.isFinite(value)) return String(value)
+		return undefined
+	}
+
 	function extractReportId(payload) {
 	function extractReportId(payload) {
 		if (payload === null || payload === undefined) return undefined
 		if (payload === null || payload === undefined) return undefined
-		if (typeof payload === 'number') return payload
-		if (typeof payload === 'string') return toNumber(payload)
+		if (typeof payload === 'number' || typeof payload === 'string') return toReportId(payload)
 		if (typeof payload !== 'object') return undefined
 		if (typeof payload !== 'object') return undefined
-		const direct = toNumber(payload.reportId ?? payload.id)
+		const direct = toReportId(payload.reportId ?? payload.id)
 		if (direct !== undefined) return direct
 		if (direct !== undefined) return direct
 		for (const key of ['data', 'dto', 'info']) {
 		for (const key of ['data', 'dto', 'info']) {
 			const nested = extractReportId(payload[key])
 			const nested = extractReportId(payload[key])

+ 6 - 4
tests/reportGenerationStatus.test.js

@@ -69,9 +69,11 @@ assert.equal(beginListPageRequest(listRefreshState, secondGeneration, 2), null)
 finishListPageRequest(listRefreshState, pageRequest)
 finishListPageRequest(listRefreshState, pageRequest)
 assert.deepEqual(beginListPageRequest(listRefreshState, secondGeneration, 2), { generation:2, page:2, key:'2:2' })
 assert.deepEqual(beginListPageRequest(listRefreshState, secondGeneration, 2), { generation:2, page:2, key:'2:2' })
 
 
-assert.equal(extractReportId(12), 12)
-assert.equal(extractReportId({ reportId:13 }), 13)
-assert.equal(extractReportId({ dto:{ reportId:14 } }), 14)
-assert.equal(extractReportId({ info:{ id:15 } }), 15)
+assert.equal(extractReportId(12), '12')
+assert.equal(extractReportId({ reportId:13 }), '13')
+assert.equal(extractReportId({ dto:{ reportId:14 } }), '14')
+assert.equal(extractReportId({ info:{ id:15 } }), '15')
+assert.equal(extractReportId('2099489115670896642'), '2099489115670896642')
+assert.equal(extractReportId({ reportId:'2099489115670896642' }), '2099489115670896642')
 
 
 console.log('report generation status rules: PASS')
 console.log('report generation status rules: PASS')

+ 9 - 6
utils/reportGenerationStatus.js

@@ -8,15 +8,18 @@ function toNumber(value) {
 	return Number.isNaN(numeric) ? undefined : numeric
 	return Number.isNaN(numeric) ? undefined : numeric
 }
 }
 
 
+function toReportId(value) {
+	if (value === '' || value === null || value === undefined) return undefined
+	if (typeof value === 'string') return value
+	if (typeof value === 'number' && Number.isFinite(value)) return String(value)
+	return undefined
+}
+
 function pickReportId(source) {
 function pickReportId(source) {
 	if (source === null || source === undefined) return undefined
 	if (source === null || source === undefined) return undefined
-	if (typeof source === 'number') return source
-	if (typeof source === 'string') {
-		const numeric = toNumber(source)
-		return numeric === undefined ? undefined : numeric
-	}
+	if (typeof source === 'number' || typeof source === 'string') return toReportId(source)
 	if (typeof source !== 'object') return undefined
 	if (typeof source !== 'object') return undefined
-	const direct = toNumber(source.reportId ?? source.id)
+	const direct = toReportId(source.reportId ?? source.id)
 	if (direct !== undefined) return direct
 	if (direct !== undefined) return direct
 	for (const key of ['data', 'dto', 'info']) {
 	for (const key of ['data', 'dto', 'info']) {
 		const nested = pickReportId(source[key])
 		const nested = pickReportId(source[key])