"""PR 与 Code Owner 映射表模型"""
import datetime
from typing import Optional
import sqlalchemy as sa
from sqlalchemy import func
from sqlalchemy.orm import Mapped, mapped_column
from backend.core.database import Base
class PrCodeOwner(Base):
"""PR 与 code owner 组的映射及加分状态"""
__tablename__ = "pr_code_owners"
id: Mapped[int] = mapped_column(sa.Integer, primary_key=True, autoincrement=True)
pr_id: Mapped[int] = mapped_column(
sa.Integer, sa.ForeignKey("pull_requests.id", ondelete="CASCADE"), nullable=False,
)
owner_name: Mapped[str] = mapped_column(sa.String(128), nullable=False)
passed: Mapped[bool] = mapped_column(sa.Boolean, default=False)
pass_account: Mapped[Optional[str]] = mapped_column(sa.String(128), nullable=True)
created_at: Mapped[datetime.datetime] = mapped_column(sa.DateTime, nullable=False, server_default=func.now())
updated_at: Mapped[datetime.datetime] = mapped_column(
sa.DateTime, nullable=False, server_default=func.now(), onupdate=func.now(),
)
__table_args__ = (
sa.UniqueConstraint("pr_id", "owner_name", name="uk_pr_owner"),
sa.Index("idx_pco_passed", "passed"),
)
def __repr__(self) -> str:
return f"<PrCodeOwner(id={self.id}, pr_id={self.pr_id}, owner={self.owner_name}, passed={self.passed})>"