48 lines
2.2 KiB
Python
48 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.db.models.base import Base
|
|
|
|
|
|
class ProxyEndpoint(Base):
|
|
__tablename__ = "proxy_endpoints"
|
|
__table_args__ = (
|
|
sa.UniqueConstraint("scheme", "host", "port", "username", name="uq_proxy_identity"),
|
|
sa.CheckConstraint("enabled IN (0,1)", name="ck_proxy_enabled"),
|
|
sa.Index("idx_proxy_endpoints_enabled", "enabled"),
|
|
sa.Index("idx_proxy_endpoints_source", "source"),
|
|
)
|
|
|
|
id: Mapped[int] = mapped_column(sa.Integer(), primary_key=True, autoincrement=True)
|
|
created_at: Mapped[str] = mapped_column(
|
|
sa.Text(),
|
|
nullable=False,
|
|
server_default=sa.text("(strftime('%Y-%m-%dT%H:%M:%fZ','now'))"),
|
|
)
|
|
updated_at: Mapped[str] = mapped_column(
|
|
sa.Text(),
|
|
nullable=False,
|
|
server_default=sa.text("(strftime('%Y-%m-%dT%H:%M:%fZ','now'))"),
|
|
)
|
|
|
|
scheme: Mapped[str] = mapped_column(sa.Text(), nullable=False)
|
|
host: Mapped[str] = mapped_column(sa.Text(), nullable=False)
|
|
port: Mapped[int] = mapped_column(sa.Integer(), nullable=False)
|
|
username: Mapped[str] = mapped_column(sa.Text(), nullable=False, server_default=sa.text("''"))
|
|
password_enc: Mapped[str] = mapped_column(sa.Text(), nullable=False, server_default=sa.text("''"))
|
|
|
|
enabled: Mapped[int] = mapped_column(sa.Integer(), nullable=False, server_default=sa.text("1"))
|
|
source: Mapped[str] = mapped_column(sa.Text(), nullable=False, server_default=sa.text("'manual'"))
|
|
source_ref: Mapped[str | None] = mapped_column(sa.Text(), nullable=True)
|
|
|
|
last_latency_ms: Mapped[float | None] = mapped_column(sa.Float(), nullable=True)
|
|
last_ok_at: Mapped[str | None] = mapped_column(sa.Text(), nullable=True)
|
|
last_fail_at: Mapped[str | None] = mapped_column(sa.Text(), nullable=True)
|
|
success_count: Mapped[int] = mapped_column(sa.Integer(), nullable=False, server_default=sa.text("0"))
|
|
failure_count: Mapped[int] = mapped_column(sa.Integer(), nullable=False, server_default=sa.text("0"))
|
|
blacklisted_until: Mapped[str | None] = mapped_column(sa.Text(), nullable=True)
|
|
last_error: Mapped[str | None] = mapped_column(sa.Text(), nullable=True)
|
|
|