Coverage for polar/models/pledge_transaction.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-12-05 16:17 +0000

1from enum import StrEnum 1ab

2from uuid import UUID 1ab

3 

4from sqlalchemy import BigInteger, ForeignKey, String, Uuid 1ab

5from sqlalchemy.orm import Mapped, declared_attr, mapped_column, relationship 1ab

6 

7from polar.kit.db.models import RecordModel 1ab

8from polar.models.issue_reward import IssueReward 1ab

9from polar.models.pledge import Pledge 1ab

10 

11 

12class PledgeTransactionType(StrEnum): 1ab

13 pledge = "pledge" 1ab

14 transfer = "transfer" 1ab

15 refund = "refund" 1ab

16 disputed = "disputed" 1ab

17 

18 

19class PledgeTransaction(RecordModel): 1ab

20 __tablename__ = "pledge_transactions" 1ab

21 

22 pledge_id: Mapped[UUID] = mapped_column( 1ab

23 Uuid, ForeignKey("pledges.id"), nullable=False 

24 ) 

25 type: Mapped[PledgeTransactionType] = mapped_column(String, nullable=False) 1ab

26 amount: Mapped[int] = mapped_column(BigInteger, nullable=False) 1ab

27 transaction_id: Mapped[str | None] = mapped_column( 1ab

28 String, nullable=True, default=None 

29 ) 

30 issue_reward_id: Mapped[UUID | None] = mapped_column( 1ab

31 Uuid, ForeignKey("issue_rewards.id"), nullable=True, default=None 

32 ) 

33 

34 @declared_attr 1ab

35 def pledge(cls) -> Mapped[Pledge]: 1ab

36 return relationship( 1ab

37 Pledge, 

38 lazy="raise", 

39 ) 

40 

41 @declared_attr 1ab

42 def issue_reward(cls) -> Mapped[IssueReward]: 1ab

43 return relationship( 1ab

44 IssueReward, 

45 lazy="raise", 

46 )