Coverage for polar/models/pledge_transaction.py: 100%
25 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 12:42 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 12:42 +0000
1from enum import StrEnum
2from uuid import UUID
4from sqlalchemy import BigInteger, ForeignKey, String, Uuid
5from sqlalchemy.orm import Mapped, declared_attr, mapped_column, relationship
7from polar.kit.db.models import RecordModel
8from polar.models.issue_reward import IssueReward
9from polar.models.pledge import Pledge
12class PledgeTransactionType(StrEnum):
13 pledge = "pledge"
14 transfer = "transfer"
15 refund = "refund"
16 disputed = "disputed"
19class PledgeTransaction(RecordModel):
20 __tablename__ = "pledge_transactions"
22 pledge_id: Mapped[UUID] = mapped_column(
23 Uuid, ForeignKey("pledges.id"), nullable=False
24 )
25 type: Mapped[PledgeTransactionType] = mapped_column(String, nullable=False)
26 amount: Mapped[int] = mapped_column(BigInteger, nullable=False)
27 transaction_id: Mapped[str | None] = mapped_column(
28 String, nullable=True, default=None
29 )
30 issue_reward_id: Mapped[UUID | None] = mapped_column(
31 Uuid, ForeignKey("issue_rewards.id"), nullable=True, default=None
32 )
34 @declared_attr
35 def pledge(cls) -> Mapped[Pledge]:
36 return relationship(
37 Pledge,
38 lazy="raise",
39 )
41 @declared_attr
42 def issue_reward(cls) -> Mapped[IssueReward]:
43 return relationship(
44 IssueReward,
45 lazy="raise",
46 )