From 5567cc7673e90258d094952f422eec0d08f21c0e Mon Sep 17 00:00:00 2001 From: Mish Date: Sun, 23 Nov 2025 19:13:36 +0000 Subject: [PATCH] Add a /api/ticket endpoint for ticket info (#122) * Add a /api/ticket endpoint! * Add some validation and user-friendly error msgs --- nephthys/api/ticket.py | 38 +++++++++++++++++++++++++++++++++++++ nephthys/utils/starlette.py | 2 ++ 2 files changed, 40 insertions(+) create mode 100644 nephthys/api/ticket.py diff --git a/nephthys/api/ticket.py b/nephthys/api/ticket.py new file mode 100644 index 0000000..aba15b4 --- /dev/null +++ b/nephthys/api/ticket.py @@ -0,0 +1,38 @@ +from starlette.requests import Request +from starlette.responses import JSONResponse + +from nephthys.utils.env import env + + +async def ticket_info(req: Request): + try: + ticket_id = int(req.query_params["id"]) + except KeyError: + return JSONResponse({"error": "missing_ticket_id"}, status_code=400) + except ValueError: + return JSONResponse({"error": "invalid_ticket_id"}, status_code=400) + ticket = await env.db.ticket.find_unique( + where={"id": ticket_id}, + include={"openedBy": True, "closedBy": True, "assignedTo": True}, + ) + + if not ticket: + return JSONResponse({"error": "ticket_not_found"}, status_code=404) + + return JSONResponse( + { + "title": ticket.title, + "description": ticket.description, + "status": ticket.status, + "opened_by": {"slack_id": ticket.openedBy.slackId} + if ticket.openedBy + else None, + "closed_by": {"slack_id": ticket.closedBy.slackId} + if ticket.closedBy + else None, + "assigned_to": {"slack_id": ticket.assignedTo.slackId} + if ticket.assignedTo + else None, + "created_at": ticket.createdAt.isoformat(), + } + ) diff --git a/nephthys/utils/starlette.py b/nephthys/utils/starlette.py index fe57ea4..81061ce 100644 --- a/nephthys/utils/starlette.py +++ b/nephthys/utils/starlette.py @@ -11,6 +11,7 @@ from starlette_exporter import PrometheusMiddleware from nephthys.__main__ import main from nephthys.api.stats import stats +from nephthys.api.ticket import ticket_info from nephthys.api.user import user_stats from nephthys.utils.env import env from nephthys.utils.slack import app as slack_app @@ -59,6 +60,7 @@ app = Starlette( Route(path="/slack/events", endpoint=endpoint, methods=["POST"]), Route(path="/api/stats", endpoint=stats, methods=["GET"]), Route(path="/api/user", endpoint=user_stats, methods=["GET"]), + Route(path="/api/ticket", endpoint=ticket_info, methods=["GET"]), Route(path="/health", endpoint=health, methods=["GET"]), Route(path="/metrics", endpoint=metrics, methods=["GET"]), ],