The backend component to interface with the smart contract.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

64 rader
1.9 KiB

  1. import pika
  2. from fastapi import APIRouter
  3. from datetime import datetime
  4. from app.core.config import settings
  5. from app.contracts.issue import IssueContract
  6. from app.crud.user import get_user
  7. from app.db.session import get_db_session
  8. from app.schemas.issue import IssuePost, AddIssueRequest, VoteIssueRequest, AddIssueResponse
  9. router = APIRouter()
  10. @router.get("/list", response_model=list[IssuePost])
  11. async def list_issues():
  12. smart_contract = IssueContract(
  13. settings.CONTRACT_ID,
  14. settings.WALLET_ID
  15. )
  16. issue_list = await smart_contract.list_issues()
  17. return issue_list
  18. @router.get("/paragraphs")
  19. async def get_paragraphs(issue_id: str):
  20. smart_contract = IssueContract(
  21. settings.CONTRACT_ID,
  22. settings.WALLET_ID
  23. )
  24. paragraphs = await smart_contract.get_paragraphs(bytes.fromhex(issue_id))
  25. return paragraphs
  26. @router.post("/create", response_model=AddIssueResponse)
  27. async def create_issue(request: AddIssueRequest):
  28. smart_contract = IssueContract(
  29. settings.CONTRACT_ID,
  30. settings.WALLET_ID
  31. )
  32. async for session in get_db_session():
  33. user = await get_user(session, request.session_id)
  34. time_since_auth = datetime.now() - datetime.fromtimestamp(user.auth_date)
  35. if user and time_since_auth.total_seconds() < settings.AUTH_TIMEOUT:
  36. await smart_contract.add_issue(request.title, request.paragraphs, user.username)
  37. return {'result': True}
  38. else:
  39. return {'result': False}
  40. return {'result': False}
  41. @router.post("/vote")
  42. async def vote_issue(request: VoteIssueRequest):
  43. smart_contract = IssueContract(
  44. settings.CONTRACT_ID,
  45. settings.WALLET_ID
  46. )
  47. if request.increase and not request.decrease:
  48. await smart_contract.increase_vote(bytes.fromhex(request.issue_id))
  49. elif request.decrease and not request.increase:
  50. await smart_contract.decrease_vote(bytes.fromhex(request.issue_id))
  51. return