from datetime import datetime from ninja import Schema class TicketIn(Schema): title: str description: str category_code: str | None = None priority: str = "medium" problem_performance: str = "" problem_object: str = "" submitter_name: str = "" submitter_org: str = "" impact_scope: str = "" environment: str = "" related_system: str = "" assignee_id: int | None = None class TicketUpdateIn(Schema): title: str | None = None description: str | None = None category_code: str | None = None priority: str | None = None problem_performance: str | None = None problem_object: str | None = None submitter_name: str | None = None submitter_org: str | None = None resolution: str | None = None is_resolved: bool | None = None replied_to_customer: bool | None = None impact_scope: str | None = None environment: str | None = None related_system: str | None = None assignee_id: int | None = None class TicketStatusIn(Schema): status: str remark: str = "" resolution: str = "" is_resolved: bool | None = None replied_to_customer: bool | None = None class TicketUserOut(Schema): id: int username: str display_name: str class TicketCategoryOut(Schema): id: int code: str name: str description: str class TicketOut(Schema): id: int ticket_no: str title: str description: str category: TicketCategoryOut | None = None category_code: str | None = None status: str priority: str problem_performance: str problem_object: str submitter_name: str submitter_org: str ai_solution: str resolution: str is_resolved: bool replied_to_customer: bool impact_scope: str environment: str related_system: str requester_id: int | None assignee_id: int | None requester: TicketUserOut | None = None assignee: TicketUserOut | None = None created_at: datetime updated_at: datetime class TicketListOut(Schema): items: list[TicketOut] page: int page_size: int total: int total_pages: int class TicketEventOut(Schema): id: int event_type: str from_value: dict to_value: dict remark: str operator: TicketUserOut | None = None created_at: datetime class TicketCommentIn(Schema): content: str comment_type: str = "user" visibility: str = "internal" class TicketCommentOut(Schema): id: int content: str comment_type: str visibility: str created_at: datetime class TicketAttachmentIn(Schema): file_name: str file_type: str = "" mime_type: str = "" file_size: int = 0 storage_path: str class TicketAttachmentOut(Schema): id: int file_name: str file_type: str mime_type: str file_size: int storage_path: str created_at: datetime