Coverage for src/cstlcore/models/password_reset_tokens.py: 95%
21 statements
« prev ^ index » next coverage.py v7.9.1, created at 2026-02-19 12:46 +0000
« prev ^ index » next coverage.py v7.9.1, created at 2026-02-19 12:46 +0000
1import uuid
2from datetime import datetime
3from typing import TYPE_CHECKING
5from sqlmodel import TIMESTAMP, Column, Field, SQLModel, text
7if TYPE_CHECKING:
8 pass
11class PasswordResetTokenBase(SQLModel):
12 token: str = Field(index=True, nullable=False, unique=True)
13 user_id: uuid.UUID = Field(foreign_key="user.id", nullable=False)
14 used_at: datetime | None = Field(default=None, nullable=True)
15 expires_at: datetime = Field(nullable=False)
18class PasswordResetToken(PasswordResetTokenBase, table=True):
19 id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
20 created_at: datetime | None = Field(
21 default=None,
22 sa_column=Column(
23 TIMESTAMP(timezone=True),
24 nullable=False,
25 server_default=text("CURRENT_TIMESTAMP"),
26 ),
27 )
30class PasswordResetTokenPublic(PasswordResetTokenBase):
31 id: uuid.UUID
32 created_at: datetime
35class PasswordResetTokenCreate(SQLModel):
36 token: str
37 user_id: uuid.UUID
38 expires_at: datetime