Free and open source ticket system written in python
at main 39 lines 1.5 kB view raw
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()