kopia lustrzana https://github.com/bugout-dev/moonstream
API list call request types
rodzic
b0d8e17254
commit
6dfca4a49b
|
@ -52,6 +52,7 @@ def upgrade():
|
|||
op.create_table('call_request_types',
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('request_type', sa.VARCHAR(length=128), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.PrimaryKeyConstraint('id', name=op.f('pk_call_request_types')),
|
||||
sa.UniqueConstraint('id', name=op.f('uq_call_request_types_id'))
|
||||
)
|
||||
|
@ -62,8 +63,8 @@ def upgrade():
|
|||
op.create_foreign_key(op.f('fk_call_requests_call_request_type_id_call_request_types'), 'call_requests', 'call_request_types', ['call_request_type_id'], ['id'], ondelete='CASCADE')
|
||||
|
||||
# Manual - Start
|
||||
op.execute(f"INSERT INTO call_request_types (id, request_type) VALUES ('{str(uuid.uuid4())}', 'raw');")
|
||||
op.execute(f"INSERT INTO call_request_types (id, request_type) VALUES ('{str(uuid.uuid4())}', 'dropper-v0.2.0');")
|
||||
op.execute(f"INSERT INTO call_request_types (id, request_type, description) VALUES ('{str(uuid.uuid4())}', 'raw', 'A generic smart contract. You can ask users to submit arbitrary calldata to this contract.');")
|
||||
op.execute(f"INSERT INTO call_request_types (id, request_type, description) VALUES ('{str(uuid.uuid4())}', 'dropper-v0.2.0', 'A Dropper v0.2.0 contract. You can authorize users to submit claims against this contract.');")
|
||||
op.execute("UPDATE call_requests SET call_request_type_id = (SELECT call_request_types.id FROM call_request_types INNER JOIN registered_contracts ON call_requests.registered_contract_id = registered_contracts.id WHERE call_request_types.request_type = registered_contracts.contract_type);")
|
||||
op.alter_column("call_requests", "call_request_type_id", nullable=False)
|
||||
# Manual - End
|
||||
|
|
|
@ -12,7 +12,7 @@ from web3 import Web3
|
|||
|
||||
from . import data, db
|
||||
from .data import ContractType
|
||||
from .models import CallRequest, RegisteredContract
|
||||
from .models import CallRequest, RegisteredContract, CallRequestType
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
@ -334,6 +334,13 @@ def get_call_requests(
|
|||
)
|
||||
|
||||
|
||||
def list_call_request_types(
|
||||
db_session: Session,
|
||||
) -> List[CallRequestType]:
|
||||
call_request_types = db_session.query(CallRequestType).all()
|
||||
return call_request_types
|
||||
|
||||
|
||||
def list_call_requests(
|
||||
db_session: Session,
|
||||
contract_id: Optional[uuid.UUID],
|
||||
|
|
|
@ -208,6 +208,19 @@ class ContractType(Enum):
|
|||
dropper = "dropper-v0.2.0"
|
||||
|
||||
|
||||
class CallRequestTypeResponse(BaseModel):
|
||||
id: UUID
|
||||
request_type: str
|
||||
description: str
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
class CallRequestTypesResponse(BaseModel):
|
||||
call_request_types: List[CallRequestTypeResponse] = Field(default_factory=list)
|
||||
|
||||
|
||||
class RegisterContractRequest(BaseModel):
|
||||
blockchain: str
|
||||
address: str
|
||||
|
|
|
@ -172,6 +172,7 @@ class CallRequestType(Base): # type: ignore
|
|||
unique=True,
|
||||
)
|
||||
request_type = Column(VARCHAR(128), nullable=False, unique=True, index=True)
|
||||
description = Column(String, nullable=True)
|
||||
|
||||
call_requests = relationship(
|
||||
"CallRequest",
|
||||
|
|
|
@ -38,6 +38,7 @@ whitelist_paths = {
|
|||
"/metatx/openapi.json": "GET",
|
||||
f"/metatx/{DOCS_TARGET_PATH}": "GET",
|
||||
"/metatx/contracts/types": "GET",
|
||||
"/metatx/requests/types": "GET",
|
||||
"/metatx/requests": "GET",
|
||||
}
|
||||
|
||||
|
@ -62,17 +63,6 @@ app.add_middleware(
|
|||
)
|
||||
|
||||
|
||||
@app.get("/contracts/types", tags=["contracts"])
|
||||
async def contract_types() -> Dict[str, str]:
|
||||
"""
|
||||
Describes the contract_types that users can register contracts as against this API.
|
||||
"""
|
||||
return {
|
||||
data.ContractType.raw.value: "A generic smart contract. You can ask users to submit arbitrary calldata to this contract.",
|
||||
data.ContractType.dropper.value: "A Dropper contract. You can authorize users to submit claims against this contract.",
|
||||
}
|
||||
|
||||
|
||||
@app.get("/contracts", tags=["contracts"], response_model=List[data.RegisteredContract])
|
||||
async def list_registered_contracts(
|
||||
request: Request,
|
||||
|
@ -219,6 +209,31 @@ async def delete_contract(
|
|||
return deleted_contract
|
||||
|
||||
|
||||
# TODO(kompotkot): route `/contracts/types` deprecated
|
||||
@app.get("/contracts/types", tags=["contracts"])
|
||||
@app.get(
|
||||
"/requests/types", tags=["requests"], response_model=data.CallRequestTypesResponse
|
||||
)
|
||||
async def contract_types(
|
||||
db_session: Session = Depends(db.yield_db_read_only_session),
|
||||
) -> data.CallRequestTypesResponse:
|
||||
"""
|
||||
Describes the call_request_types that users can register call requests as against this API.
|
||||
"""
|
||||
try:
|
||||
call_request_types = contracts_actions.list_call_request_types(
|
||||
db_session=db_session,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(repr(e))
|
||||
raise EngineHTTPException(status_code=500)
|
||||
return data.CallRequestTypesResponse(
|
||||
call_request_types=[
|
||||
call_request_type for call_request_type in call_request_types
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@app.get("/requests", tags=["requests"], response_model=List[data.CallRequest])
|
||||
async def list_requests(
|
||||
contract_id: Optional[UUID] = Query(None),
|
||||
|
|
Ładowanie…
Reference in New Issue