kopia lustrzana https://github.com/bugout-dev/moonstream
Complete call_request endpoint
rodzic
74f956ff64
commit
0ed9ad2ecc
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
Ładowanie…
Reference in New Issue