from typing import Optional from sqlalchemy import Index, Column, JSON from sqlmodel import SQLModel, Field, Relationship from app.models.kb_generate_task import KBGenerateConfig class JiraProjectConfig(KBGenerateConfig): target_confluence_site_id: Optional[int] = None target_confluence_space_id: Optional[str] = None target_confluence_parent_page_id: Optional[str] = None class JiraProject(SQLModel, table=True): __tablename__ = "jira_projects" __table_args__ = ( Index("uni_jp_on_site_id_project_id", "site_id", "id", unique=True), Index("uni_jp_on_site_id_project_key", "site_id", "key", unique=True), ) guid: str = Field( primary_key=True, description="format: SITE-{site_id}-PROJECT-{project_id}" ) id: str = Field(max_length=32) key: str = Field(max_length=32) name: str = Field(max_length=32) config: JiraProjectConfig = Field(default={}, sa_column=Column(JSON)) site_id: int = Field(foreign_key="jira_sites.id") site: "JiraSite" = Relationship( sa_relationship_kwargs={ "lazy": "joined", "primaryjoin": "JiraProject.site_id == JiraSite.id", }, )