Complete call_request endpoint

pull/932/head
kompotkot 2023-10-16 11:54:39 +00:00
rodzic 74f956ff64
commit 0ed9ad2ecc
2 zmienionych plików z 70 dodań i 1 usunięć

Wyświetl plik

@ -577,6 +577,44 @@ def delete_requests(
return requests_to_delete_num
def complete_call_request(
db_session: Session,
tx_hash: str,
call_request_id: uuid.UUID,
) -> CallRequest:
results = (
db_session.query(CallRequest, RegisteredContract)
.join(
RegisteredContract,
CallRequest.registered_contract_id == RegisteredContract.id,
)
.filter(CallRequest.id == call_request_id)
.all()
)
if len(results) == 0:
raise CallRequestNotFound("Call request with given ID not found")
elif len(results) != 1:
raise Exception(
f"Incorrect number of results found for request_id {call_request_id}"
)
call_request, registered_contract = results[0]
call_request.tx_hash = tx_hash
try:
db_session.add(call_request)
db_session.commit()
except Exception as err:
logger.error(
f"complete_call_request -- error updating in database: {repr(err)}"
)
db_session.rollback()
raise
return (call_request, registered_contract)
def handle_register(args: argparse.Namespace) -> None:
"""
Handles the register command.

Wyświetl plik

@ -10,7 +10,7 @@ from typing import Dict, List, Optional
from uuid import UUID
from bugout.data import BugoutUser
from fastapi import Body, Depends, FastAPI, Path, Query, Request
from fastapi import Body, Depends, FastAPI, Form, Path, Query, Request
from sqlalchemy.exc import NoResultFound
from sqlalchemy.orm import Session
@ -19,6 +19,7 @@ from ..middleware import (
BroodAuthMiddleware,
BugoutCORSMiddleware,
EngineHTTPException,
metatx_sign_header,
user_for_auth_header,
)
from ..settings import DOCS_TARGET_PATH
@ -47,6 +48,7 @@ whitelist_paths = {
"/metatx/contracts/types": "GET",
"/metatx/requests/types": "GET",
"/metatx/requests": "GET", # Controls by custom authentication check
"/metatx/requests/complete": "POST", # Controls by metatx authentication check
}
app = FastAPI(
@ -429,3 +431,32 @@ async def delete_requests(
raise EngineHTTPException(status_code=500)
return deleted_requests
# @app.post("/requests/{request_id}/complete", tags=["requests"])
@app.post("/requests/complete", tags=["requests"])
async def complete_call_request_route(
tx_hash: str = Form(...),
call_request_id: UUID = Form(...),
message=Depends(metatx_sign_header),
db_session: Session = Depends(db.yield_db_session),
):
"""
Set tx hash for specified call_request by verified account.
"""
try:
request = contracts_actions.complete_call_request(
db_session=db_session,
tx_hash=tx_hash,
call_request_id=call_request_id,
)
except contracts_actions.CallRequestNotFound:
raise EngineHTTPException(
status_code=404,
detail="There is no call request with that ID.",
)
except Exception as e:
logger.error(repr(e))
raise EngineHTTPException(status_code=500)
return contracts_actions.parse_call_request_response(request)