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
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 12:42 +0000
1from datetime import datetime
2from uuid import UUID
4from sqlalchemy import CHAR, TIMESTAMP, ForeignKey, String, Uuid
5from sqlalchemy.orm import Mapped, declared_attr, mapped_column, relationship
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
13def get_expires_at() -> datetime:
14 return utc_now() + settings.CUSTOMER_SESSION_CODE_TTL
17class CustomerSessionCode(RecordModel):
18 __tablename__ = "customer_session_codes"
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)
26 customer_id: Mapped[UUID] = mapped_column(
27 Uuid, ForeignKey("customers.id", ondelete="cascade"), nullable=False, index=True
28 )
30 @declared_attr
31 def customer(cls) -> Mapped[Customer]:
32 return relationship(Customer, lazy="joined")