import logging from sqlmodel import Session from app.models.kb_issue_case import KBIssueCase from app.models.kb_generate_task import KBGenerateTask from app.models.jira_issue import JiraIssue from app.models.jira_project import JiraProject from app.models.jira_site import JiraSite from app.models.confluence_page import ConfluencePage from app.models.jira_project import JiraProjectConfig from app.models.jira_site import JiraSiteConfig from app.models.kb_generate_task import KBGenerateConfig from app.models.support_ticket import SupportTicket from app.repositories.base import BaseRepo logger = logging.getLogger(__name__) class KBGenerateTaskRepo(BaseRepo): model_cls = KBGenerateTask def get(self, session: Session, task_id: int): return session.get(KBGenerateTask, task_id) def must_get(self, session: Session, task_id: int) -> KBGenerateTask: task = self.get(session, task_id) if not task: raise Exception(f"KBGenerateTask #{task_id} is not found") return task def create_task(self, session: Session, jira_issue: JiraIssue) -> KBGenerateTask: site: JiraSite = jira_issue.site site_config = JiraSiteConfig.model_validate(site.config) project: JiraProject = jira_issue.project project_config = JiraProjectConfig.model_validate(project.config) merged_config = site_config.model_dump() project_config_dict = { k: v for k, v in project_config.model_dump().items() if v is not None } merged_config.update(project_config_dict) print(f"merged_config: {merged_config}") task_config = KBGenerateConfig(**merged_config) task = KBGenerateTask( jira_issue=jira_issue, config=task_config.model_dump(), ) session.add(task) session.commit() session.refresh(task) return task def update_support_ticket( self, session: Session, task: KBGenerateTask, support_ticket: SupportTicket ): task.support_ticket = support_ticket.model_dump() session.merge(task) session.commit() session.refresh(task) return task def update_kb_issue_case( self, session: Session, task: KBGenerateTask, kb_issue_case: KBIssueCase ): task.kb_issue_case = kb_issue_case.model_dump() session.merge(task) session.commit() session.refresh(task) return task def update_confluence_page( self, session: Session, task: KBGenerateTask, confluence_page: ConfluencePage ): task.confluence_page_guid = confluence_page.guid task.confluence_page = confluence_page session.merge(task) session.commit() session.refresh(task) return task kb_generate_task_repo = KBGenerateTaskRepo()