Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
265 changes: 243 additions & 22 deletions controller/validate/index.ts

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
},
"homepage": "https://github.com/ONDC-Official/log-validation-utility",
"dependencies": {
"@anthropic-ai/claude-code": "^1.0.92",
"@types/js-yaml": "^4.0.9",
"ajv": "^8.17.1",
"ajv-errors": "^3.0.0",
Expand Down
58 changes: 47 additions & 11 deletions shared/schemaValidatorV2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,13 @@ import { cancelSchemaTRV_12 } from '../schema/TRV-12/cancel'
import { onConfirmSchemaTRV_12 } from '../schema/TRV-12/on_confirm'
import { onCancelSchemaTRV_12 } from '../schema/TRV-12/on_cancel'
import { searchFIS14Schema } from '../schema/FIS/Mutual_Funds/search'
import {onSearchFIS14Schema} from '../schema/FIS/Mutual_Funds/on_search'
import {selectFIS14Schema} from '../schema/FIS/Mutual_Funds/select'
import {onSelectFIS14Schema} from '../schema/FIS/Mutual_Funds/on_select'
import {initFIS14Schema} from '../schema/FIS/Mutual_Funds/init'
import {onInitFIS14Schema} from '../schema/FIS/Mutual_Funds/on_init'
import {confirmFIS14Schema} from '../schema/FIS/Mutual_Funds/confirm'
import {onConfirmFIS14Schema} from '../schema/FIS/Mutual_Funds/on_confirm'
import { onSearchFIS14Schema } from '../schema/FIS/Mutual_Funds/on_search'
import { selectFIS14Schema } from '../schema/FIS/Mutual_Funds/select'
import { onSelectFIS14Schema } from '../schema/FIS/Mutual_Funds/on_select'
import { initFIS14Schema } from '../schema/FIS/Mutual_Funds/init'
import { onInitFIS14Schema } from '../schema/FIS/Mutual_Funds/on_init'
import { confirmFIS14Schema } from '../schema/FIS/Mutual_Funds/confirm'
import { onConfirmFIS14Schema } from '../schema/FIS/Mutual_Funds/on_confirm'
// import { onStatusFIS14Schema } from '../schema/FIS/Mutual_Funds/on_status'
import { onUpdateFIS14Schema } from '../schema/FIS/Mutual_Funds/on_update'

Expand Down Expand Up @@ -122,9 +122,8 @@ const formatted_error = (errors: any) => {
errors.forEach((error: any) => {
if (!['not', 'oneOf', 'anyOf', 'allOf', 'if', 'then', 'else'].includes(error.keyword)) {
const error_dict = {
message: `${error.message}${error.params.allowedValues ? ` (${error.params.allowedValues})` : ''}${
error.params.allowedValue ? ` (${error.params.allowedValue})` : ''
}${error.params.additionalProperty ? ` (${error.params.additionalProperty})` : ''}`,
message: `${error.message}${error.params.allowedValues ? ` (${error.params.allowedValues})` : ''}${error.params.allowedValue ? ` (${error.params.allowedValue})` : ''
}${error.params.additionalProperty ? ` (${error.params.additionalProperty})` : ''}`,
details: error.instancePath,
}
error_list.push(error_dict)
Expand Down Expand Up @@ -807,11 +806,41 @@ const validate_schema_cancel_RET11_for_json = (data: any) => {
const error_list = validate_schema(data, cancelSchema)
return formatted_error(error_list)
}
const validate_schema_cancel_RET12_for_json = (data: any) => {
const error_list = validate_schema(data, cancelSchema)
return formatted_error(error_list)
}
const validate_schema_cancel_RET13_for_json = (data: any) => {
const error_list = validate_schema(data, cancelSchema)
return formatted_error(error_list)
}
const validate_schema_cancel_RET14_for_json = (data: any) => {
const error_list = validate_schema(data, cancelSchema)
return formatted_error(error_list)
}
const validate_schema_cancel_RET15_for_json = (data: any) => {
const error_list = validate_schema(data, cancelSchema)
return formatted_error(error_list)
}
const validate_schema_cancel_RET16_for_json = (data: any) => {
const error_list = validate_schema(data, cancelSchema)
return formatted_error(error_list)
}
const validate_schema_cancel_RET17_for_json = (data: any) => {
const error_list = validate_schema(data, cancelSchema)
return formatted_error(error_list)
}
const validate_schema_cancel_RET18_for_json = (data: any) => {
const error_list = validate_schema(data, cancelSchema)
return formatted_error(error_list)
}
const validate_schema_cancel_RET19_for_json = (data: any) => {
const error_list = validate_schema(data, cancelSchema)
return formatted_error(error_list)
}



// ON_CANCEL
const validate_schema_on_cancel_1_trv14_for_json = (data: any) => {
const error_list = validate_schema(data, onCancel1SchemaTRV14)
Expand Down Expand Up @@ -1302,7 +1331,7 @@ const validate_schema_report_rsf_for_json = (data: any) => {
console.log('error_list of reporrt', formatted_error(error_list))
return formatted_error(error_list)
}

const validate_schema_on_report_rsf_for_json = (data: any) => {
const error_list = validate_schema(data, onReportSchema)
return formatted_error(error_list)
Expand Down Expand Up @@ -1367,6 +1396,13 @@ export default {
validate_schema_on_confirm_RET19_for_json,
validate_schema_cancel_RET11_for_json,
validate_schema_cancel_RET19_for_json,
validate_schema_cancel_RET15_for_json,
validate_schema_cancel_RET16_for_json,
validate_schema_cancel_RET17_for_json,
validate_schema_cancel_RET18_for_json,
validate_schema_cancel_RET13_for_json,
validate_schema_cancel_RET14_for_json,
validate_schema_cancel_RET12_for_json,
validate_schema_on_cancel_RET11_for_json,
// validate_schema_on_cancel_RET19_for_json,
validate_schema_track_RET11_for_json,
Expand Down
47 changes: 39 additions & 8 deletions utils/Retail_.1.2.5/Cancel/cancel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ import { logger } from '../../../shared/logger'
import { validateSchemaRetailV2, isObjectEmpty, checkContext, checkBppIdOrBapId } from '../..'
import { getValue, setValue } from '../../../shared/dao'
import { FLOW } from '../../enum'
import {isValidISO8601Duration} from '../../index'
import { isValidISO8601Duration } from '../../index'

export const checkCancel = (data: any, msgIdSet: any,action:string,flow?:string) => {
export const checkCancel = (data: any, msgIdSet: any, action: string, flow?: string, schemaValidation?: boolean, stateless?: boolean) => {
const cnclObj: any = {}
const schemaErrors: any = {}
// const forceCnclObj:any = {}
try {
if (!data || isObjectEmpty(data)) {
Expand All @@ -21,7 +22,11 @@ export const checkCancel = (data: any, msgIdSet: any,action:string,flow?:string)
}

const searchContext: any = getValue(`${ApiSequence.SEARCH}_context`)
const schemaValidation = validateSchemaRetailV2('RET11', constants.CANCEL, data)
const schemaValidationResult =
schemaValidation !== false
? validateSchemaRetailV2('RET11', constants.CANCEL, data)
: 'skip'

const select: any = getValue(`${ApiSequence.SELECT}`)
const contextRes: any = checkContext(context, constants.CANCEL)

Expand All @@ -30,14 +35,29 @@ export const checkCancel = (data: any, msgIdSet: any,action:string,flow?:string)

if (checkBap) Object.assign(cnclObj, { bap_id: 'context/bap_id should not be a url' })
if (checkBpp) Object.assign(cnclObj, { bpp_id: 'context/bpp_id should not be a url' })
if (schemaValidation !== 'error') {
Object.assign(cnclObj, schemaValidation)
if (schemaValidationResult !== 'error' && schemaValidationResult !== 'skip') {
Object.assign(schemaErrors, schemaValidationResult)
}

if (!contextRes?.valid) {
Object.assign(cnclObj, contextRes.ERRORS)
}

if (stateless) {
const hasSchema = Object.keys(schemaErrors).length > 0
const hasBusiness = Object.keys(cnclObj).length > 0

if (!hasSchema && !hasBusiness) return false

if (schemaValidation !== undefined) {
return { schemaErrors, businessErrors: cnclObj }
}

const combinedErrors = { ...schemaErrors, ...cnclObj }
return Object.keys(combinedErrors).length > 0 ? combinedErrors : false
}


try {
logger.info(`Adding Message Id /${constants.CANCEL}`)
if (msgIdSet.has(context.message_id)) {
Expand Down Expand Up @@ -132,8 +152,8 @@ export const checkCancel = (data: any, msgIdSet: any,action:string,flow?:string)
}
try {
if (flow === FLOW.FLOW005) {
console.log("cancel.tags",JSON.stringify(cancel.tags));
console.log("cancel.tags", JSON.stringify(cancel.tags));

if (cancel.cancellation_reason_id !== '052') {
cnclObj['invalidCancellationReasonId'] =
`In /${constants.FORCE_CANCEL}, cancellation_reason_id must be '052'`
Expand Down Expand Up @@ -180,7 +200,18 @@ export const checkCancel = (data: any, msgIdSet: any,action:string,flow?:string)
logger.error(`!!Some error occurred while checking /${constants.FORCE_CANCEL} API`, error)
}

return cnclObj
const hasSchema = Object.keys(schemaErrors).length > 0
const hasBusiness = Object.keys(cnclObj).length > 0

if (!hasSchema && !hasBusiness) return false

if (schemaValidation !== undefined) {
return { schemaErrors, businessErrors: cnclObj }
}

const combinedErrors = { ...schemaErrors, ...cnclObj }
return Object.keys(combinedErrors).length > 0 ? combinedErrors : false

} catch (err: any) {
logger.error(`!!Some error occurred while checking /${constants.CANCEL} API`, err)
}
Expand Down
46 changes: 35 additions & 11 deletions utils/Retail_.1.2.5/Cancel/onCancel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ import {
import { getValue, setValue } from '../../../shared/dao'
import { FLOW } from '../../enum'

export const checkOnCancel = (data: any, msgIdSet: any) => {
export const checkOnCancel = (data: any, msgIdSet: any, schemaValidation?: boolean, stateless?: boolean) => {
const onCnclObj: any = {}
const schemaErrors: any = {}
const onConfirmQuote = getValue(`${constants.ON_CONFIRM}/quote`)
try {
if (!data || isObjectEmpty(data)) {
Expand All @@ -35,12 +36,12 @@ export const checkOnCancel = (data: any, msgIdSet: any) => {
}
const searchContext: any = getValue(`${ApiSequence.SEARCH}_context`)
const flow = getValue('flow')
let schemaValidation: any
if (flow === '5') {
schemaValidation = validateSchemaRetailV2(context.domain.split(':')[1], constants.ON_CANCEL_RTO, data)
} else {
schemaValidation = validateSchemaRetailV2(context.domain.split(':')[1], constants.ON_CANCEL, data)
}
const schemaValidationResult =
schemaValidation !== false
? (flow === '5'
? validateSchemaRetailV2(context.domain.split(':')[1], constants.ON_CANCEL_RTO, data)
: validateSchemaRetailV2(context.domain.split(':')[1], constants.ON_CANCEL, data))
: 'skip'
const select: any = getValue(`${ApiSequence.SELECT}`)
const contextRes: any = checkContext(context, constants.ON_CANCEL)
const checkBap = checkBppIdOrBapId(context.bap_id)
Expand All @@ -50,12 +51,25 @@ export const checkOnCancel = (data: any, msgIdSet: any) => {

if (checkBap) Object.assign(onCnclObj, { bap_id: 'context/bap_id should not be a url' })
if (checkBpp) Object.assign(onCnclObj, { bpp_id: 'context/bpp_id should not be a url' })
if (schemaValidation !== 'error') {
Object.assign(onCnclObj, schemaValidation)
if (schemaValidationResult !== 'error' && schemaValidationResult !== 'skip') {
Object.assign(schemaErrors, schemaValidationResult)
}
if (!contextRes?.valid) {
Object.assign(onCnclObj, contextRes.ERRORS)
}
if (stateless) {
const hasSchema = Object.keys(schemaErrors).length > 0
const hasBusiness = Object.keys(onCnclObj).length > 0

if (!hasSchema && !hasBusiness) return false

if (schemaValidation !== undefined) {
return { schemaErrors, businessErrors: onCnclObj }
}

const combinedErrors = { ...schemaErrors, ...onCnclObj }
return Object.keys(combinedErrors).length > 0 ? combinedErrors : false
}

if (flow === '4') {
try {
Expand Down Expand Up @@ -346,7 +360,7 @@ export const checkOnCancel = (data: any, msgIdSet: any) => {

try {
logger.info(`Checking for Item IDs in quote object in /${constants.ON_CANCEL}`)
let cancelFulfillment:any = []
let cancelFulfillment: any = []
if (flow === '5') {
cancelFulfillment = _.filter(on_cancel.fulfillments, { type: 'RTO' })?.[0]
} else {
Expand Down Expand Up @@ -1071,7 +1085,17 @@ export const checkOnCancel = (data: any, msgIdSet: any) => {
// logger.error(`!!Some error occurred while checking /${constants.ON_CANCEL} API`, error)
// }

return onCnclObj
const hasSchema = Object.keys(schemaErrors).length > 0
const hasBusiness = Object.keys(onCnclObj).length > 0

if (!hasSchema && !hasBusiness) return false

if (schemaValidation !== undefined) {
return { schemaErrors, businessErrors: onCnclObj }
}

const combinedErrors = { ...schemaErrors, ...onCnclObj }
return Object.keys(combinedErrors).length > 0 ? combinedErrors : false
} catch (err: any) {
logger.error(`!!Some error occurred while checking /${constants.ON_CANCEL} API`, err)
}
Expand Down
Loading