Coverage for app / models / link.py: 100%
17 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-21 22:41 +0300
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-21 22:41 +0300
1from datetime import UTC, datetime
2from typing import TYPE_CHECKING
4from sqlalchemy import ForeignKey, String
5from sqlalchemy.orm import Mapped, mapped_column, relationship
7from app.models.base import Base
9if TYPE_CHECKING:
10 from app.models.user import User
13class Link(Base):
14 __tablename__ = "links"
16 id: Mapped[int] = mapped_column(primary_key=True)
17 user_id: Mapped[int | None] = mapped_column(ForeignKey("users.id"))
18 long_url: Mapped[str] = mapped_column(String(2048))
19 short_code: Mapped[str] = mapped_column(String(30), unique=True, index=True)
20 created_at: Mapped[datetime] = mapped_column(
21 default=lambda: datetime.now(tz=UTC).replace(tzinfo=None)
22 )
23 expires_at: Mapped[datetime]
24 last_visited_at: Mapped[datetime | None] = mapped_column(default=None)
25 visits_counter: Mapped[int] = mapped_column(default=0)
26 auto_prolong: Mapped[bool] = mapped_column(default=False)
28 user: Mapped["User"] = relationship(back_populates="urls")