{
  "openapi": "3.0.0",
  "info": {
    "title": "Solar Category Schema",
    "description": "The API will be organized around REST. Our API will have predictable, resource-oriented URLs, and will use HTTP response codes to indicate API errors. ",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://mconnect.creditfair.in",
      "description": "mconnect uat server"
    }
  ],
  "paths": {
    "/customerRest/customerSrv/checkPreEligibility": {
      "post": {
        "tags": [
          "Mconnect Update Application"
        ],
        "requestBody": {
          "content": {
            "type": "object",
            "properties": {
              "customer_name": {
                "type": "string",
                "message": {
                  "return_code": "201002",
                  "message": "Customer name is required",
                  "CF_code": "CF300",
                  "pattern": ""
                }
              },
              "mobile_number": {
                "type": "string",
                "pattern": "^[0-9]\\d{9}$",
                "minLength": 10,
                "maxLength": 10,
                "message": {
                  "return_code": "201002",
                  "message": "Mobile Number is required in the correct format & length. It should be string",
                  "CF_code": "CF300",
                  "pattern": ""
                }
              },
              "electricity_bill_amount": {
                "type": "integer",
                "message": {
                  "return_code": "201002",
                  "message": "Electricity bill amount is required",
                  "CF_code": "CF300",
                  "pattern": ""
                }
              },
              "city": {
                "type": "string",
                "message": {
                  "return_code": "201002",
                  "message": "City is required",
                  "CF_code": "CF300",
                  "pattern": ""
                }
              },
              "uniqueId": {
                "type": ["string", "null"]
              }
            },
            "required": [
              "customer_name",
              "mobile_number",
              "electricity_bill_amount",
              "city",
              "uniqueId"
            ]
          },
          "rules": {
            "data": []
          }
        },
        "responses": {
          "CF300": {
            "content": {
              "application/json": {
                "request_id": "$request_id",
                "returnStatus": {
                  "returnCode": "$response.return_code",
                  "returnText": "$response.message"
                }
              },
              "status_code": 400
            },
            "actions": [
              {
                "operation": "query",
                "queryType": "update",
                "table": "merchant_api_request",
                "clause": {
                  "where": [
                    "id"
                  ],
                  "queryParams": [
                    "$merchant_api_request_id"
                  ]
                },
                "values": {
                  "response": "json_dumps->$response",
                  "request_id": "$request_id",
                  "updated_at": "datetime.CUR_TIMESTAMP"
                }
              }
            ]
          },
          "CF200": {
            "content": {
              "application/json": {
                "preEligibilityId": "$pre_eligibility_applications_id",
                "returnStatus": {
                  "returnCode": "000000",
                  "returnText": "Application created successfully"
                }
              },
              "status_code": 200
            },
            "actions": [
              {
                "operation": "query",
                "queryType": "update",
                "table": "merchant_api_request",
                "clause": {
                  "where": [
                    "id"
                  ],
                  "queryParams": [
                    "$merchant_api_request_id"
                  ]
                },
                "values": {
                  "response": "json_dumps->$response",
                  "request_id": "$request_id",
                  "updated_at": "datetime.CUR_TIMESTAMP"
                }
              }
            ]
          },
          "CF500": {
            "content": {
              "application/json": "null",
              "status_code": 400
            }
          }
        },
        "functions": {
          "init": [
            {
              "operation": "setData",
              "stateKey": "request_id",
              "value": "UUID"
            },
            {
              "operation": "query",
              "queryType": "insert",
              "table": "merchant_api_request",
              "values": {
                "created_at": "datetime.CUR_TIMESTAMP",
                "merchant_id": "$merchant_details.id",
                "request": "json_dumps->$request"
              },
              "auto_id": "id"
            },
            {
              "operation": "mapData",
              "stateKey": "monthly_income",
              "key": "$request.city",
              "enum": {
                "Agra": 66783,
                "Ahmedabad": 56367,
                "Amravati": 65204,
                "Aurangabad": 66486,
                "Bareilly": 71201,
                "Bengaluru": 190255,
                "Bhopal": 69296,
                "Chennai": 118123,
                "Coimbatore": 108345,
                "Delhi": 97371,
                "Gurgaon": 123555,
                "Gwalior": 55660,
                "Hyderabad": 124967,
                "Indore": 87535,
                "Jabalpur": 63233,
                "Jaipur": 73622,
                "Jalgaon": 53526,
                "Kanpur": 71894,
                "Kolhapur": 71518,
                "Lucknow": 63950,
                "Meerut": 71307,
                "Nagpur": 70250,
                "Nashik": 70233,
                "Noida": 88763,
                "Pune": 93076,
                "Solapur": 63451,
                "Surat": 72426,
                "Varanasi": 79476,
                "Vijayawada": 120834
              }
            }
          ],
          "createData": [
            {
                "operation": "calculate",
                "stateKey": "loan_amount",
                "value": "$monthly_income * 6"
            },
            {
                "operation": "query",
                "table": "pre_eligibility_applications",
                "queryType": "insert",
                "values": {
                "customer_name": "$request.customer_name",
                "mobile_number": "encrypt->$request.mobile_number",
                "electricity_bill_amount": "$request.electricity_bill_amount",
                "city": "$request.city",
                "monthly_income": "$monthly_income",
                "tenure": 6,
                "loan_amount": "$loan_amount",
                "result": "pending",
                "created_at": "datetime.CUR_TIMESTAMP",
                "merchant_id": "$merchant_details.id",
                "unique_id": "$request.uniqueId"
                },
                "auto_id": "id"
            },
            {
                "operation": "concat",
                "values": [
                "{'cmd':'command:CheckPreEligibility','con':'jobs','param':{'id':",
                "$pre_eligibility_applications_id",
                ",'merchant_id':",
                "$merchant_details.id",
                "},'job_handler':'App\\\\Helpers\\\\CmdHelper@runCommand'}"
                ],
                "stateKey": "queue_input"
            },
            {
                "operation": "setData",
                "stateKey": "json_queue_input",
                "value": "json_dumps->$queue_input"
            }
            ]
        },
        "persistence": [
            {
                "queryType": "insert",
                "table": "queue_log",
                "values": {
                "uid": "null",
                "status": "pen",
                "exchange": "job_exch",
                "route_key": "exch_rout_key_job",
                "job_handler": "App\\Helpers\\CmdHelper@runCommand",
                "input": "$json_queue_input",
                "attempt_count": "0",
                "cmd": "command:CheckPreEligibility",
                "created_at": "datetime.CUR_TIMESTAMP",
                "application_id": null
                }
            }
        ]
      }
    },
    "/customerRest/customerSrv/save-consent": {
      "post": {
        "requestBody": {
          "content": {
            "type": "object",
            "properties": {
              "preEligibilityId": {
                "description": "Error",
                "type": [
                  "number"
                ],
                "minLength": 4,
                "message": {
                  "return_code": "201002",
                  "message": "Pre-Eligibility Id is required in the correct format",
                  "pattern": "",
                  "CF_code": "CF300"
                }
              },
              "latitude": {
                "type": [
                  "string"
                ],
                "message": {
                  "return_code": "201002",
                  "message": "Latitude is required as string",
                  "CF_code": "CF300",
                  "pattern": ""
                }
              },
              "longitude": {
                "type": [
                  "string"
                ],
                "message": {
                  "return_code": "201002",
                  "message": "Longitude is required as string",
                  "CF_code": "CF300",
                  "pattern": ""
                }
              },
              "ip": {
                "type": [
                  "string",
                  "null"
                ],
                "message": {
                  "return_code": "201002",
                  "message": "IP is required as string",
                  "CF_code": "CF300",
                  "pattern": ""
                }
              },
              "status": {
                "type": [
                  "string"
                ],
                "message": {
                  "return_code": "201002",
                  "message": "Status is required as string",
                  "CF_code": "CF300",
                  "pattern": ""
                }
              }
            },
            "required": [
              "preEligibilityId",
              "latitude",
              "longitude",
              "status",
              "ip"
            ]
          },
          "rules": {
            "data": [
              {
                "conditions": [
                  "$request.latitude",
                  "equals",
                  "null"
                ],
                "true": {
                  "operation": "returnResponse",
                  "return_code": "201004",
                  "CF_code": "CF300",
                  "message": "Null string is not allowed in latitude"
                }
              },
              {
                "conditions": [
                  "$request.longitude",
                  "equals",
                  "null"
                ],
                "true": {
                  "operation": "returnResponse",
                  "return_code": "201004",
                  "CF_code": "CF300",
                  "message": "Null string is not allowed in longitude"
                }
              }
            ]
          }
        },
        "responses": {
          "CF300": {
            "content": {
              "application/json": {
                "request_id": "$request_id",
                "returnStatus": {
                  "returnCode": "$response.return_code",
                  "returnText": "$response.message"
                }
              },
              "status_code": 400
            },
            "actions": [
              {
                "operation": "query",
                "queryType": "update",
                "table": "merchant_api_request",
                "clause": {
                  "where": [
                    "id"
                  ],
                  "queryParams": [
                    "$merchant_api_request_id"
                  ]
                },
                "values": {
                  "response": "json_dumps->$response",
                  "request_id": "$request_id",
                  "updated_at": "datetime.CUR_TIMESTAMP"
                }
              }
            ]
          },
          "CF200": {
            "content": {
              "application/json": {
                "request_id": "$request_id",
                "returnStatus": {
                  "returnCode": "000000",
                  "returnText": "Success"
                }
              },
              "status_code": 200
            },
            "actions": [
              {
                "operation": "query",
                "queryType": "update",
                "table": "merchant_api_request",
                "clause": {
                  "where": [
                    "id"
                  ],
                  "queryParams": [
                    "$merchant_api_request_id"
                  ]
                },
                "values": {
                  "response": "json_dumps->$response",
                  "request_id": "$request_id",
                  "updated_at": "datetime.CUR_TIMESTAMP"
                }
              }
            ]
          },
          "CF201": {
            "content": {
              "application/json": {
                "request_id": "$request_id",
                "returnStatus": {
                  "returnCode": "$response.return_code",
                  "returnText": "$response.message"
                }
              },
              "status_code": 200
            },
            "actions": [
              {
                "operation": "query",
                "queryType": "update",
                "table": "merchant_api_request",
                "clause": {
                  "where": [
                    "id"
                  ],
                  "queryParams": [
                    "$merchant_api_request_id"
                  ]
                },
                "values": {
                  "response": "json_dumps->$response",
                  "request_id": "$request_id",
                  "updated_at": "datetime.CUR_TIMESTAMP"
                }
              }
            ]
          }
        },
        "functions": {
          "init": [
            {
              "operation": "setData",
              "stateKey": "request_id",
              "value": "UUID"
            },
            {
              "operation": "setData",
              "stateKey": "applicant_type",
              "value": 1
            },
            {
              "operation": "query",
              "queryType": "insert",
              "table": "merchant_api_request",
              "values": {
                "created_at": "datetime.CUR_TIMESTAMP",
                "merchant_id": "$merchant_details.id",
                "request": "json_dumps->$request"
              },
              "auto_id": "id"
            },
            {
              "conditions": [
                "$request.ip",
                "isNotNull"
              ],
              "false": {
                "operation": "setData",
                "value": "UNKNOWN",
                "stateKey": "ip"
              },
              "true": {
                "operation": "setData",
                "value": "$request.ip",
                "stateKey": "ip"
              }
            }
          ],
          "checkConsentExists": [
            {
              "operation": "query",
              "queryType": "select",
              "table": "pre_eligibility_consent_log",
              "columns": [
                "pre_eligibility_application_id"
              ],
              "clause": {
                "where": [
                  "pre_eligibility_application_id"
                ],
                "queryParams": [
                  "$preEligibilityId"
                ]
              },
              "stateKey": "consent_exists"
            },
            {
              "conditions": [
                "$consent_exists",
                "isNotNull"
              ],
              "true": {
                "operation": "returnResponse",
                "CF_code": "CF201",
                "return_code": "201002",
                "message": "Consent already exists"
              }
            },
            {
              "operation": "concat",
              "values": [
                "{'pre_eligibility_application_id': '",
                "$request.preEligibilityId",
                "', 'applicant_type': '",
                "$applicant_type",
                "'}"
              ],
              "stateKey": "payload"
            }
          ]
        },
        "persistence": [
          {
            "conditions": [
              "$applicant_type",
              "equals",
              2
            ],
            "false": {
              "queryType": "update",
              "table": "pre_eligibility_applications",
              "clause": {
                "where": [
                  "id"
                ],
                "queryParams": [
                  "$preEligibilityId"
                ]
              },
              "values": {
                "is_consent": 1
              }
            }
          },
          {
            "table": "pre_eligibility_consent_log",
            "queryType": "insert",
            "values": {
              "pre_eligibility_application_id": "$request.preEligibilityId",
              "ips": "$ip",
              "latitude": "$request.latitude",
              "longitude": "$request.longitude",
              "status": "1",
              "type": "bureau",
              "applicant_type": "$applicant_type",
              "created_at": "datetime.CUR_TIMESTAMP",
              "updated_at": "datetime.CUR_TIMESTAMP"
            }
          },
          {
            "table": "jobs",
            "queryType": "insert",
            "values": {
              "`from`": "preEligibilityConsent",
              "payload": "json_dumps->$payload",
              "application_id": "$request.preEligibilityId",
              "available_at": "datetime.CUR_TIMESTAMP",
              "created_at": "datetime.CUR_TIMESTAMP",
              "updated_at": "datetime.CUR_TIMESTAMP"
            }
          }
        ]
      }
    }
  }
}