@sap/xsodata
Version:
Expose data from a HANA database as OData V2 service with help of .xsodata files.
89 lines (82 loc) • 3.5 kB
JavaScript
;
const odataUri = require('./../uri/oDataUriParser');
const serviceProcessor = require('./../serializer/serviceSerializer');
const metadataProcessor = require('./../serializer/metadataSerializer');
const batchProcessor = require('./../processor/batchProcessor');
const resourceProcessor = require('./resourceProcessor');
const batchRunState = require('./../utils/batch/batchConst').runState;
const Measurement = require('./../utils/measurement');
exports.processRequest = function (context, asyncDone) {
try {
context.logger.silly('processor', 'processRequest');
const oData = context.oData;
if (oData.kind === odataUri.URI_KIND_Service) {
Measurement.measureWithCB(
serviceProcessor.process,
context,
asyncDone,
'serviceProcessor.process'
);
} else if (oData.kind === odataUri.URI_KIND_MetaData) {
Measurement.measureWithCB(
metadataProcessor.process,
context,
asyncDone,
'metadataProcessor.process'
);
} else if (oData.kind === odataUri.URI_KIND_Batch) {
Measurement.measureWithCB(
batchProcessor.process,
context,
asyncDone,
'batchProcessor.process'
); // $batch-request itself
} else if (oData.kind === odataUri.URI_KIND_Resource) {
if (!context.batchContext) {
// regular request processing
Measurement.measureWithCB(
resourceProcessor.process,
context,
asyncDone,
'resourceProcessor.process'
);
} else {
const batchContext = context.batchContext; // $batch-request: operation processing (based on status)
if (batchContext.status === batchRunState.createTables) {
// on batch changes: all temp. tables of all operations are generated at beginning batch
Measurement.measureWithCB(
resourceProcessor.processInBatchCreateTables,
context,
asyncDone,
'processInBatchCreateTables'
);
} else if (batchContext.status === batchRunState.execution) {
Measurement.measureWithCB(
resourceProcessor.processInBatch,
context,
asyncDone,
'processInBatch'
);
} else if (batchContext.status === batchRunState.preCommitRun) {
Measurement.measureWithCB(
resourceProcessor.processInBatchPreCommitRun,
context,
asyncDone,
'processInBatchPreCommitRun'
);
} else if (
batchContext.status === batchRunState.postCommitRun
) {
Measurement.measureWithCB(
resourceProcessor.processInBatchPostCommitRun,
context,
asyncDone,
'processInBatchPostCommitRun'
);
}
}
}
} catch (ex) {
return asyncDone(ex);
}
};