Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "_archival_operations_metadata": {
- "description": "Archival operations with modular SQL structure for dual database operations",
- "pattern": "source_selection + field_extraction + json_consolidation + destination_insert",
- "databases": {
- "source": "bl_ria_api (MySQL_BL_RIA_API)",
- "destination": "bl_ria_archive (MySQL_BL_RIA_ARCHIVE)"
- }
- },
- "archive_transaction_chain": {
- "type": "archival_operation",
- "description": "Archive complete transaction lifecycle with 7-table JSON consolidation",
- "source_operations": {
- "database": {
- "env": "MYSQL_BL_RIA_API"
- },
- "selection": {
- "description": "Find eligible transactions for archiving",
- "sql": "SELECT io.transaction_no FROM bl_ria_api.init_operations io WHERE io.is_recurring = 0 AND io.created_at < DATE_SUB(NOW(), INTERVAL ? DAY) AND NOT EXISTS (SELECT 1 FROM bl_ria_archive.archived_operations ao WHERE ao.transaction_no = io.transaction_no) ORDER BY io.created_at ASC"
- },
- "field_extraction": {
- "description": "Extract core fields from init_operations",
- "base_fields": "SELECT io.transaction_no, io.created_at, io.retailer_channel_id, io.subchannel_id, io.initiator_msisdn, io.id, io.payment_data, io.is_recurring FROM bl_ria_api.init_operations io WHERE io.transaction_no IN (?)",
- "payment_info": {
- "payment_channel": "SELECT tr.payment_channel FROM bl_ria_api.transaction_requests tr WHERE tr.transaction_no = ? LIMIT 1",
- "payment_id": "SELECT COALESCE((SELECT t.payment_id FROM bl_ria_api.transactions t JOIN bl_ria_api.transaction_requests tr ON t.transaction_request_id = tr.id WHERE tr.transaction_no = ? LIMIT 1), (SELECT tr.payment_id FROM bl_ria_api.transaction_requests tr WHERE tr.transaction_no = ? LIMIT 1))",
- "payment_reference": "SELECT t.payment_reference_no FROM bl_ria_api.transactions t JOIN bl_ria_api.transaction_requests tr ON t.transaction_request_id = tr.id WHERE tr.transaction_no = ? LIMIT 1"
- },
- "customer_info": {
- "customer_email": "SELECT COALESCE(NULLIF((SELECT tr.customer_email FROM bl_ria_api.transaction_requests tr WHERE tr.transaction_no = ? LIMIT 1), ''), NULLIF(io.initiator_email, ''), NULL) FROM bl_ria_api.init_operations io WHERE io.transaction_no = ?",
- "target_msisdn": "SELECT rr.customer_msisdn FROM bl_ria_api.recharge_requests rr JOIN bl_ria_api.transactions t ON rr.transaction_id = t.id JOIN bl_ria_api.transaction_requests tr ON t.transaction_request_id = tr.id WHERE tr.transaction_no = ? AND rr.customer_msisdn != (SELECT io.initiator_msisdn FROM bl_ria_api.init_operations io WHERE io.transaction_no = ?) LIMIT 1"
- },
- "business_info": {
- "campaign_id": "SELECT NULLIF(COALESCE(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(io.payment_data, '$[0].cashback_campaign_id')), 'null'), (SELECT tr.campaign_id FROM bl_ria_api.transaction_requests tr WHERE tr.transaction_no = ? LIMIT 1)), 'null') FROM bl_ria_api.init_operations io WHERE io.transaction_no = ?",
- "failed_reason": "SELECT COALESCE((SELECT tr.failed_reason FROM bl_ria_api.transaction_requests tr WHERE tr.transaction_no = ? AND tr.failed_reason IS NOT NULL LIMIT 1), (SELECT rfr.reason FROM bl_ria_api.refund_requests rfr JOIN bl_ria_api.transactions t ON rfr.transaction_id = t.id JOIN bl_ria_api.transaction_requests tr ON t.transaction_request_id = tr.id WHERE tr.transaction_no = ? AND rfr.reason IS NOT NULL LIMIT 1))",
- "retry_count": "SELECT rr.retry_no FROM bl_ria_api.recharge_requests rr JOIN bl_ria_api.transactions t ON rr.transaction_id = t.id JOIN bl_ria_api.transaction_requests tr ON t.transaction_request_id = tr.id WHERE tr.transaction_no = ? ORDER BY rr.created_at DESC LIMIT 1"
- }
- },
- "json_consolidation": {
- "description": "7-table JSON aggregation for complete audit trail",
- "init_operations": "SELECT JSON_ARRAYAGG(JSON_OBJECT('transaction_no', io2.transaction_no, 'initiator_msisdn', io2.initiator_msisdn, 'initiator_email', io2.initiator_email, 'retailer_channel_id', io2.retailer_channel_id, 'subchannel_id', io2.subchannel_id, 'callback_url_success', io2.callback_url_success, 'callback_url_fail', io2.callback_url_fail, 'callback_url_cancel', io2.callback_url_cancel, 'ipn_url', io2.ipn_url, 'ipn_status', io2.ipn_status, 'payment_data', io2.payment_data, 'status', io2.status, 'custom_params', io2.custom_params, 'user_data', io2.user_data, 'extra_info', io2.extra_info, 'is_recurring', io2.is_recurring, 'recurring_params', io2.recurring_params, 'created_at', io2.created_at, 'updated_at', io2.updated_at)) FROM bl_ria_api.init_operations io2 WHERE io2.transaction_no = ?",
- "transaction_requests": "SELECT JSON_ARRAYAGG(JSON_OBJECT('id', tr.id, 'customer_email', tr.customer_email, 'transaction_no', tr.transaction_no, 'payment_id', tr.payment_id, 'payment_gateway_rule_id', tr.payment_gateway_rule_id, 'retailer_channel_id', tr.retailer_channel_id, 'mobile_number', tr.mobile_number, 'payment_amount', tr.payment_amount, 'individual_recharge_amount', tr.individual_recharge_amount, 'individual_cashback_amount', tr.individual_cashback_amount, 'individual_offer_id', tr.individual_offer_id, 'individual_iris', tr.individual_iris, 'payment_channel', tr.payment_channel, 'transaction_status', tr.transaction_status, 'currency', tr.currency, 'deleted_at', tr.deleted_at, 'created_at', tr.created_at, 'updated_at', tr.updated_at, 'bank_approved_amount', tr.bank_approved_amount, 'payment_reference_no', tr.payment_reference_no, 'customer_msisdn', tr.customer_msisdn, 'op_code', tr.op_code, 'init_operations_id', tr.init_operations_id, 'cb_account', tr.cb_account, 'failed_reason', tr.failed_reason, 'extra_info', tr.extra_info, 'is_recurring', tr.is_recurring, 'campaign_id', tr.campaign_id)) FROM bl_ria_api.transaction_requests tr WHERE tr.transaction_no = ?",
- "transactions": "SELECT JSON_ARRAYAGG(JSON_OBJECT('id', t.id, 'transaction_request_id', t.transaction_request_id, 'payment_id', t.payment_id, 'payment_reference_no', t.payment_reference_no, 'gateway_charge', t.gateway_charge, 'actual_amount', t.actual_amount, 'card_type_name', t.card_type_name, 'card_number', t.card_number, 'card_expiry_date', t.card_expiry_date, 'deleted_at', t.deleted_at, 'created_at', t.created_at, 'updated_at', t.updated_at, 'bank_approved_amount', t.bank_approved_amount)) FROM bl_ria_api.transactions t JOIN bl_ria_api.transaction_requests tr2 ON t.transaction_request_id = tr2.id WHERE tr2.transaction_no = ?",
- "recharge_requests": "SELECT JSON_ARRAYAGG(JSON_OBJECT('id', rr.id, 'transaction_id', rr.transaction_id, 'customer_msisdn', rr.customer_msisdn, 'ref_id', rr.ref_id, 'trx_id', rr.trx_id, 'recharge_amount', rr.recharge_amount, 'cashback_amount', rr.cashback_amount, 'iris_data', rr.iris_data, 'retry_no', rr.retry_no, 'status', rr.status, 'created_at', rr.created_at, 'updated_at', rr.updated_at, 'campaign_id', rr.campaign_id)) FROM bl_ria_api.recharge_requests rr JOIN bl_ria_api.transactions t2 ON rr.transaction_id = t2.id JOIN bl_ria_api.transaction_requests tr3 ON t2.transaction_request_id = tr3.id WHERE tr3.transaction_no = ?",
- "recharges": "SELECT JSON_ARRAYAGG(JSON_OBJECT('transaction_id', r.transaction_id, 'recharge_request_id', r.recharge_request_id, 'retailer_msisdn', r.retailer_msisdn, 'customer_msisdn', r.customer_msisdn, 'recharge_amount', r.recharge_amount, 'recharge_platform', r.recharge_platform, 'payment_channel', r.payment_channel, 'campaign_id', r.campaign_id)) FROM bl_ria_api.recharges r JOIN bl_ria_api.transactions t2 ON r.transaction_id = t2.id JOIN bl_ria_api.transaction_requests tr3 ON t2.transaction_request_id = tr3.id WHERE tr3.transaction_no = ?",
- "refund_requests": "SELECT JSON_ARRAYAGG(JSON_OBJECT('id', rfr.id, 'transaction_id', rfr.transaction_id, 'payment_id', rfr.payment_id, 'query_refund_request_id', rfr.query_refund_request_id, 'amount', rfr.amount, 'currency', rfr.currency, 'status', rfr.status, 'status_code', rfr.status_code, 'accepted', rfr.accepted, 'created_at', rfr.created_at, 'updated_at', rfr.updated_at, 'reason', rfr.reason)) FROM bl_ria_api.refund_requests rfr JOIN bl_ria_api.transactions t3 ON rfr.transaction_id = t3.id JOIN bl_ria_api.transaction_requests tr4 ON t3.transaction_request_id = tr4.id WHERE tr4.transaction_no = ?",
- "refunds": "SELECT JSON_ARRAYAGG(JSON_OBJECT('id', rf.id, 'transaction_id', rf.transaction_id, 'refund_request_id', rf.refund_request_id, 'payment_id', rf.payment_id, 'response_id', rf.response_id, 'amount', rf.amount, 'currency', rf.currency, 'status', rf.status, 'created_at', rf.created_at, 'updated_at', rf.updated_at)) FROM bl_ria_api.refunds rf JOIN bl_ria_api.transactions t4 ON rf.transaction_id = t4.id JOIN bl_ria_api.transaction_requests tr5 ON t4.transaction_request_id = tr5.id WHERE tr5.transaction_no = ?"
- }
- },
- "destination_operations": {
- "database": {
- "env": "MYSQL_BL_RIA_ARCHIVE"
- },
- "insert_template": {
- "description": "INSERT template for archived_operations table",
- "sql": "INSERT INTO bl_ria_archive.archived_operations (transaction_no, transaction_date, payment_channel, payment_id, payment_reference_no, op_type, retailer_channel_id, subchannel_id, initiator_msisdn, customer_email, target_msisdn, campaign_id, failed_reason, retry_count, archived_data, source_table, source_id, archiver_version, data_integrity_hash, transaction_chain_id) VALUES (?, ?, ?, ?, ?, 'transaction_chain', ?, ?, ?, ?, ?, ?, ?, ?, ?, 'transaction_chain', ?, 'v1.0', ?, ?)",
- "field_mapping": {
- "transaction_no": "source.transaction_no",
- "transaction_date": "source.created_at",
- "payment_channel": "field_extraction.payment_info.payment_channel",
- "payment_id": "field_extraction.payment_info.payment_id",
- "payment_reference_no": "field_extraction.payment_info.payment_reference",
- "retailer_channel_id": "source.retailer_channel_id",
- "subchannel_id": "source.subchannel_id",
- "initiator_msisdn": "source.initiator_msisdn",
- "customer_email": "field_extraction.customer_info.customer_email",
- "target_msisdn": "field_extraction.customer_info.target_msisdn",
- "campaign_id": "field_extraction.business_info.campaign_id",
- "failed_reason": "field_extraction.business_info.failed_reason",
- "retry_count": "field_extraction.business_info.retry_count",
- "archived_data": "json_consolidation.consolidated_json",
- "source_id": "source.id",
- "data_integrity_hash": "SHA2(CONCAT(transaction_no, '|', created_at, '|', initiator_msisdn, '|', COALESCE(payment_data, ''), '|', is_recurring), 256)",
- "transaction_chain_id": "CONCAT('CHAIN_', transaction_no)"
- }
- },
- "progress_tracking": {
- "sql": "INSERT INTO bl_ria_archive.archival_progress (batch_id, transaction_count, success_count, error_count, start_time, end_time, status, additional_info) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
- "columns": [
- {
- "id": "batch_id",
- "title": "Batch ID"
- },
- {
- "id": "transaction_count",
- "title": "Transaction Count"
- },
- {
- "id": "success_count",
- "title": "Success Count"
- },
- {
- "id": "error_count",
- "title": "Error Count"
- },
- {
- "id": "start_time",
- "title": "Start Time"
- },
- {
- "id": "end_time",
- "title": "End Time"
- },
- {
- "id": "status",
- "title": "Status"
- },
- {
- "id": "additional_info",
- "title": "Additional Info"
- }
- ]
- }
- },
- "execution_config": {
- "batch_processing": {
- "batchSize": 100,
- "chunkSize": "100",
- "maxRetries": 3,
- "retryDelay": 5000,
- "transactionTimeout": 300000
- },
- "validation": {
- "pre_archival": "SELECT COUNT(*) FROM bl_ria_api.init_operations WHERE transaction_no IN (?)",
- "post_archival": "SELECT COUNT(*) FROM bl_ria_archive.archived_operations WHERE transaction_no IN (?)",
- "integrity_check": "SELECT COUNT(*) FROM bl_ria_archive.archived_operations WHERE transaction_no IN (?) AND JSON_VALID(archived_data) = 1"
- }
- },
- "output": {
- "outputDir": "/usr/src/app/output/archive",
- "outputFilePathPrefix": "archival_operations_",
- "outputFileExtension": "log",
- "delimiter": "|"
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement