from datetime import datetime from ninja import Schema class TicketIn(Schema): title: str description: str priority: str = "medium" impact_scope: str = "" environment: str = "" related_system: str = "" assignee_id: int | None = None class TicketUpdateIn(Schema): title: str | None = None description: str | None = None priority: str | 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 = "" class TicketUserOut(Schema): id: int username: str display_name: str class TicketOut(Schema): id: int ticket_no: str title: str description: str status: str priority: str 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