from typing import Any, Optional from sqlalchemy import Index, Column, JSON from sqlmodel import SQLModel, Field, Relationship from app.models.jira_project import JiraProject class JiraIssue(SQLModel, table=True): __tablename__ = "jira_issues" __table_args__ = ( Index("uni_ji_on_site_id_issue_key", "site_id", "key", unique=True), ) guid: str = Field(primary_key=True, description="SITE-{site_id}-ISSUE-{issue_id}") id: str = Field(nullable=False, max_length=32) key: str = Field(nullable=False, max_length=32) link: str = Field(nullable=False, max_length=128) summary: str = Field(max_length=512) kb_issue_case_link: Optional[str] = Field(max_length=512) fields: Any = Field(sa_column=Column(JSON)) project_guid: str = Field( nullable=False, max_length=32, foreign_key="jira_projects.guid" ) project_id: str = Field(nullable=False, max_length=32) project_key: str = Field(nullable=False, max_length=32) project: "JiraProject" = Relationship( sa_relationship_kwargs={ "lazy": "joined", "primaryjoin": "JiraIssue.project_guid == JiraProject.guid", }, ) site_id: int = Field(foreign_key="jira_sites.id") site: "JiraSite" = Relationship( sa_relationship_kwargs={ "lazy": "joined", "primaryjoin": "JiraIssue.site_id == JiraSite.id", }, )