diff --git a/backend/main.py b/backend/main.py index a434e29..d40f0cf 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,3 +1,5 @@ +from datetime import UTC, datetime + from fastapi import FastAPI, HTTPException, Query, Request, Response from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse @@ -234,6 +236,9 @@ def create_ticket(t: Ticket): @app.put("/tickets/{id}") def update_ticket(id: str, t: Ticket): data = clean_empty_strings(model_data(t), "customer_id", "device_id", "assigned_user_id") + # schema.sql has no trigger for tickets.updated_at, so the column only ever + # held the creation time. Stamp it here on every edit. + data["updated_at"] = datetime.now(UTC).isoformat() old = db_get("tickets", f"id=eq.{escape_filter_value(id)}&select=status") result = db_patch("tickets", id, data) if old and old[0]["status"] != data["status"]: diff --git a/backend/test_main.py b/backend/test_main.py index ebd5e80..b53c74d 100644 --- a/backend/test_main.py +++ b/backend/test_main.py @@ -559,3 +559,30 @@ def test_ai_suggest_maps_errors_to_http_responses(client, error, expected_status res = test_client.post("/ai/suggest", json={"ticket_id": "t1"}) assert res.status_code == expected_status + + +def test_update_ticket_sets_updated_at(client, monkeypatch): + from datetime import datetime + + test_client, main = client + patches = [] + monkeypatch.setattr(main, "db_get", lambda table, params="": [{"status": "Open"}]) + monkeypatch.setattr( + main, "db_patch", lambda table, row_id, data: patches.append(data) or [data] + ) + + res = test_client.put("/tickets/t1", json={"title": "Printer down", "status": "Open"}) + + assert res.status_code == 200 + stamp = datetime.fromisoformat(patches[0]["updated_at"]) + assert stamp.tzinfo is not None + + +def test_create_ticket_does_not_send_updated_at(client, monkeypatch): + test_client, main = client + calls = [] + monkeypatch.setattr(main, "db_post", lambda table, data: calls.append(data) or data) + + test_client.post("/tickets", json={"title": "Printer down"}) + + assert "updated_at" not in calls[0]