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

19 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 12:42 +0000

1from datetime import datetime 

2from uuid import UUID 

3 

4from sqlalchemy import CHAR, TIMESTAMP, ForeignKey, String, Uuid 

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

6 

7from polar.config import settings 

8from polar.kit.db.models.base import RecordModel 

9from polar.kit.utils import utc_now 

10from polar.models.customer import Customer 

11 

12 

13def get_expires_at() -> datetime: 

14 return utc_now() + settings.CUSTOMER_SESSION_CODE_TTL 

15 

16 

17class CustomerSessionCode(RecordModel): 

18 __tablename__ = "customer_session_codes" 

19 

20 code: Mapped[str] = mapped_column(CHAR(64), unique=True, nullable=False) 

21 expires_at: Mapped[datetime] = mapped_column( 

22 TIMESTAMP(timezone=True), nullable=False, index=True, default=get_expires_at 

23 ) 

24 email: Mapped[str] = mapped_column(String(320), nullable=False) 

25 

26 customer_id: Mapped[UUID] = mapped_column( 

27 Uuid, ForeignKey("customers.id", ondelete="cascade"), nullable=False, index=True 

28 ) 

29 

30 @declared_attr 

31 def customer(cls) -> Mapped[Customer]: 

32 return relationship(Customer, lazy="joined")