feat: render real ticket event timeline
This commit is contained in:
@@ -16,6 +16,7 @@ from apps.tickets.schemas import (
|
||||
TicketAttachmentOut,
|
||||
TicketCommentIn,
|
||||
TicketCommentOut,
|
||||
TicketEventOut,
|
||||
TicketIn,
|
||||
TicketListOut,
|
||||
TicketOut,
|
||||
@@ -63,6 +64,18 @@ def serialize_ticket(ticket: Ticket) -> dict:
|
||||
}
|
||||
|
||||
|
||||
def serialize_ticket_event(event: TicketEvent) -> dict:
|
||||
return {
|
||||
"id": event.id,
|
||||
"event_type": event.event_type,
|
||||
"from_value": event.from_value,
|
||||
"to_value": event.to_value,
|
||||
"remark": event.remark,
|
||||
"operator": serialize_ticket_user(event.operator),
|
||||
"created_at": event.created_at,
|
||||
}
|
||||
|
||||
|
||||
@router.post("", response=TicketOut)
|
||||
def create_ticket(request, payload: TicketIn):
|
||||
require_permission(request, "ticket.create")
|
||||
@@ -85,6 +98,7 @@ def create_ticket(request, payload: TicketIn):
|
||||
ticket=ticket,
|
||||
event_type="created",
|
||||
to_value={"status": ticket.status},
|
||||
operator=request.user if request.user.is_authenticated else None,
|
||||
)
|
||||
return serialize_ticket(ticket)
|
||||
|
||||
@@ -175,6 +189,13 @@ def get_ticket(request, ticket_id: int):
|
||||
)
|
||||
|
||||
|
||||
@router.get("/{ticket_id}/events", response=list[TicketEventOut])
|
||||
def list_ticket_events(request, ticket_id: int):
|
||||
require_permission(request, "ticket.view")
|
||||
events = TicketEvent.objects.select_related("operator").filter(ticket_id=ticket_id)
|
||||
return [serialize_ticket_event(event) for event in events]
|
||||
|
||||
|
||||
@router.patch("/{ticket_id}", response=TicketOut)
|
||||
def update_ticket(request, ticket_id: int, payload: TicketUpdateIn):
|
||||
require_permission(request, "ticket.edit")
|
||||
@@ -247,5 +268,6 @@ def add_ticket_attachment(request, ticket_id: int, payload: TicketAttachmentIn):
|
||||
ticket=ticket,
|
||||
event_type="attachment_added",
|
||||
to_value={"attachment_id": attachment.id, "file_name": attachment.file_name},
|
||||
operator=request.user if request.user.is_authenticated else None,
|
||||
)
|
||||
return attachment
|
||||
|
||||
Reference in New Issue
Block a user