|
- from uuid import uuid4
-
- from stellar_sdk.xdr import SCString, SCVal, SCBytes, SCVec, SCValType
- from typing_extensions import TypeVar
-
- from app.contracts.contract import SmartContract
- from app.schemas.issue import IssuePost
-
- T = TypeVar("T")
-
- class IssueContract(SmartContract):
- def __init__(self, contract_id, user_key):
- super().__init__(contract_id, user_key)
-
- async def list_issues(self):
- issues = await self._execute_procedure("list_issues")
- return [IssuePost(**issue) for issue in issues]
-
- async def add_issue(self, title: str, paragraphs: list[str], telegram_handle: str):
- issue_id = uuid4().bytes
- print(f' => {telegram_handle}')
- await self._execute_procedure("add_issue", [
- SCVal(type=SCValType.SCV_BYTES, bytes=SCBytes(issue_id)),
- SCVal(type=SCValType.SCV_STRING, str=SCString(title.encode('utf-8'))),
- SCVal(type=SCValType.SCV_VEC, vec=SCVec([SCVal(SCValType.SCV_STRING, str=SCString(paragraph.encode('utf-8'))) for paragraph in paragraphs])),
- SCVal(type=SCValType.SCV_STRING, str=SCString(telegram_handle.encode('utf-8'))),
- ])
-
- async def get_paragraphs(self, issue_id: bytes):
- return await self._execute_procedure("get_paragraphs_for_issue", [
- SCVal(type=SCValType.SCV_BYTES, bytes=SCBytes(issue_id))
- ])
-
- async def increase_vote(self, issue_id: bytes):
- await self._execute_procedure("increase_positive_vote", [
- SCVal(type=SCValType.SCV_BYTES, bytes=SCBytes(issue_id))
- ])
-
- async def decrease_vote(self, issue_id: bytes):
- await self._execute_procedure("increase_negative_vote", [
- SCVal(type=SCValType.SCV_BYTES, bytes=SCBytes(issue_id))
- ])
|