Source code for market.restapi.loanrequests_endpoint

import json

from twisted.web import http, resource

from market.models.loanrequest import LoanRequestStatus
from market.restapi import get_param


[docs]class LoanRequests(resource.Resource): """ This class handles requests regarding loan requests in the mortgage market community. Only accessible by financial institutions. """ def __init__(self, market_community): resource.Resource.__init__(self) self.market_community = market_community
[docs] def render_GET(self, request): """ .. http:get:: /loanrequests A GET request to this endpoint returns a list of loan requests. Only accessible by financial institutions. **Example request**: .. sourcecode:: none curl -X GET http://localhost:8085/loanrequests **Example response**: .. sourcecode:: javascript { "loan_requests": [{ "id": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3_8948AB_16", "user_id": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", "mortgage_type": "FIXEDRATE", "banks": ["ABN", "RABO"], "description": "...", "amount_wanted": 395000, "status": "PENDING" }, ...] } """ return json.dumps({"loan_requests": [loan_request.to_dictionary() for loan_request in self.market_community.data_manager.get_loan_requests()]})
def getChild(self, path, request): return SpecificLoanRequestEndpoint(self.market_community, path)
[docs]class SpecificLoanRequestEndpoint(resource.Resource): """ This class handles requests for a specific loan request. """ def __init__(self, market_community, loan_request_id): resource.Resource.__init__(self) self.market_community = market_community self.loan_request_id = loan_request_id
[docs] def render_PATCH(self, request): """ .. http:patch:: /loanrequests/(string: loan_request_id) A PATCH request to this endpoint will accept/reject a loan request. This is performed by a financial institution. **Example request**: .. sourcecode:: none curl -X PATCH http://localhost:8085/loanrequests/a94a8fe5ccb19ba61c4c0873d391e987982fbbd3_8948AB_16 --data "state=ACCEPT" **Example response**: .. sourcecode:: javascript {"success": True} """ loan_request = self.market_community.data_manager.get_loan_request(self.loan_request_id) if not loan_request: request.setResponseCode(http.NOT_FOUND) return json.dumps({"error": "loan request not found"}) parameters = http.parse_qs(request.content.read(), 1) status = get_param(parameters, 'status') if not status: request.setResponseCode(http.BAD_REQUEST) return json.dumps({"error": "missing status parameter"}) if status not in ['ACCEPT', 'REJECT']: request.setResponseCode(http.BAD_REQUEST) return json.dumps({"error": "invalid status value"}) if loan_request.status[self.market_community.data_manager.you.id] != LoanRequestStatus.PENDING: request.setResponseCode(http.BAD_REQUEST) return json.dumps({"error": "loan request is already accepted/rejected"}) if status == "ACCEPT": loan_request.status[self.market_community.data_manager.you.id] = LoanRequestStatus.ACCEPTED else: loan_request.status[self.market_community.data_manager.you.id] = LoanRequestStatus.REJECTED # TODO broadcast this into the network return json.dumps({"success": True})