feat: add trusted ticket intake backend
This commit is contained in:
@@ -24,7 +24,13 @@ from apps.tickets.schemas import (
|
||||
TicketStatusIn,
|
||||
TicketUpdateIn,
|
||||
)
|
||||
from apps.tickets.services import TicketStatusError, transition_requires_remark, transition_ticket
|
||||
from apps.tickets.services import (
|
||||
TicketDataError,
|
||||
TicketStatusError,
|
||||
create_ticket_from_fields,
|
||||
transition_requires_remark,
|
||||
transition_ticket,
|
||||
)
|
||||
|
||||
router = Router(tags=["tickets"])
|
||||
|
||||
@@ -101,37 +107,10 @@ def serialize_ticket_event(event: TicketEvent) -> dict:
|
||||
@router.post("", response=TicketOut)
|
||||
def create_ticket(request, payload: TicketIn):
|
||||
require_permission(request, "ticket.create")
|
||||
assignee = None
|
||||
if payload.assignee_id:
|
||||
assignee = get_user_model().objects.filter(id=payload.assignee_id).first()
|
||||
category = None
|
||||
if payload.category_code:
|
||||
category = TicketCategory.objects.filter(code=payload.category_code, enabled=True).first()
|
||||
if category is None:
|
||||
raise HttpError(400, "Unknown ticket category")
|
||||
ticket = Ticket.objects.create(
|
||||
ticket_no=next_ticket_no(),
|
||||
title=payload.title,
|
||||
description=payload.description,
|
||||
category=category,
|
||||
priority=payload.priority,
|
||||
problem_performance=payload.problem_performance,
|
||||
problem_object=payload.problem_object,
|
||||
submitter_name=payload.submitter_name,
|
||||
submitter_org=payload.submitter_org,
|
||||
impact_scope=payload.impact_scope,
|
||||
environment=payload.environment,
|
||||
related_system=payload.related_system,
|
||||
assignee=assignee,
|
||||
requester=request.user if request.user.is_authenticated else None,
|
||||
created_by=request.user if request.user.is_authenticated else None,
|
||||
)
|
||||
TicketEvent.objects.create(
|
||||
ticket=ticket,
|
||||
event_type="created",
|
||||
to_value={"status": ticket.status, "category_code": payload.category_code},
|
||||
operator=request.user if request.user.is_authenticated else None,
|
||||
)
|
||||
try:
|
||||
ticket = create_ticket_from_fields(payload.dict(), request.user)
|
||||
except TicketDataError as error:
|
||||
raise HttpError(400, str(error)) from error
|
||||
return serialize_ticket(ticket)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user