Pipeline/backend/app/models/forgejo_repositories.py

40 lines
1.3 KiB
Python

"""Forgejo repository model storing organization-level tracked repository metadata."""
from __future__ import annotations
from datetime import datetime
from uuid import UUID, uuid4
from sqlalchemy import Column
from sqlalchemy import JSON
from sqlmodel import Field
from app.core.time import utcnow
from app.models.base import QueryModel
RUNTIME_ANNOTATION_TYPES = (datetime,)
class ForgejoRepository(QueryModel, table=True):
"""Tracked Forgejo repository for organization."""
__tablename__ = "forgejo_repositories" # pyright: ignore[reportAssignmentType]
id: UUID = Field(default_factory=uuid4, primary_key=True)
organization_id: UUID = Field(foreign_key="organizations.id", index=True)
connection_id: UUID = Field(foreign_key="forgejo_connections.id", index=True)
owner: str
repo: str
display_name: str = Field(default="")
default_branch: str = Field(default="main")
active: bool = Field(default=True)
webhook_secret: str | None = Field(default=None)
labels: list[dict[str, object]] = Field(
default_factory=list,
sa_column=Column(JSON, nullable=False, server_default="[]"),
)
last_sync_at: datetime | None = Field(default=None)
last_sync_error: str | None = Field(default=None)
created_at: datetime = Field(default_factory=utcnow)
updated_at: datetime = Field(default_factory=utcnow)