"""RepositoryConnection links a project to a Git repository via a provider.""" import uuid from typing import TYPE_CHECKING from sqlalchemy import ForeignKey, String from sqlalchemy.orm import Mapped, mapped_column, relationship from app.models.base import Base, TimestampMixin, UUIDMixin if TYPE_CHECKING: from app.models.repository import Repository class RepositoryConnection(Base, UUIDMixin, TimestampMixin): __tablename__ = "repository_connection" # NOTE: A partial unique index on (project_id, repository_id, provider_kind) # when repository_id IS NOT NULL is deferred for MVP. Duplicate connections # are acceptable until explicit disambiguation is required. project_id: Mapped[uuid.UUID] = mapped_column( ForeignKey("project.id"), index=True ) repository_id: Mapped[uuid.UUID | None] = mapped_column( ForeignKey("repository.id"), nullable=True, index=True ) provider_kind: Mapped[str] = mapped_column( String(50), default="generic" ) credential_id: Mapped[uuid.UUID | None] = mapped_column( index=True, nullable=True ) connection_status: Mapped[str] = mapped_column( String(50), default="pending" ) default_branch: Mapped[str | None] = mapped_column( String(100), nullable=True ) repository: Mapped["Repository"] = relationship( back_populates="connections" )