Free and open source ticket system written in python
1"""
2API routes for the ticketing app.
3"""
4from ninja import Router, ModelSchema, Schema
5from ninja.orm import create_schema
6from django.conf import settings
7from django.shortcuts import get_object_or_404
8from .models import Ticket, Category
9from core.models import PawUser
10from .schemas import TicketSchema, TicketDetailSchema, CommentSchema
11
12router = Router(tags=["tickets"])
13
14
15@router.get("/", response=list[TicketSchema])
16def list_tickets(request):
17 """List all tickets."""
18 return Ticket.get_open_tickets(request.user).order_by("priority", "-updated_at").all()
19
20@router.get("/history", response=list[TicketSchema])
21def list_tickets_history(request):
22 """List all closed tickets."""
23 return Ticket.get_closed_tickets(request.user).order_by("priority", "-updated_at").all()
24
25@router.get("/{ticket_id}", response=TicketDetailSchema)
26def get_ticket(request, ticket_id: int):
27 """Get a specific ticket."""
28 # TODO: Implement ticket retrieval logic
29 return get_object_or_404(Ticket, id=ticket_id)
30
31@router.get("/{ticket_id}/comments", response=list[CommentSchema])
32def get_ticket_comments(request, ticket_id: int):
33 """Get all comments for a specific ticket."""
34 ticket = get_object_or_404(Ticket, id=ticket_id)
35 can_view_internal_comments = ticket.can_edit(request.user)
36 if can_view_internal_comments:
37 return ticket.comment_set.all()
38 else:
39 return ticket.comment_set.filter(is_only_for_staff=False).all()