From 4ece2293ecfe96c92912cc3704b5592cdd9fe636 Mon Sep 17 00:00:00 2001 From: kitos Date: Tue, 19 May 2026 17:57:34 +0200 Subject: [PATCH] fix(ownership): validate reason+priority in QueueItemCreate to return 422 not 500 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POST /ownership/queue with an invalid reason or priority was silently passing Pydantic and crashing at the DB layer (PostgreSQL enum type mismatch → 500). Added @field_validator for both fields, matching the existing validators in QueueItemPatch. Co-Authored-By: Claude Sonnet 4.6 --- backend/app/schemas/ownership_queue_schema.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/backend/app/schemas/ownership_queue_schema.py b/backend/app/schemas/ownership_queue_schema.py index a336f0f..9796434 100644 --- a/backend/app/schemas/ownership_queue_schema.py +++ b/backend/app/schemas/ownership_queue_schema.py @@ -100,6 +100,28 @@ class QueueItemCreate(BaseModel): assigned_to: Optional[UUID] = None due_date: Optional[datetime] = None + @field_validator("reason") + @classmethod + def validate_reason(cls, v): + from app.models.ownership_queue import QueueReason + try: + QueueReason(v) + except ValueError: + valid = [e.value for e in QueueReason] + raise ValueError(f"Invalid reason '{v}'. Must be one of: {valid}") + return v + + @field_validator("priority") + @classmethod + def validate_priority(cls, v): + from app.models.ownership_queue import QueuePriority + try: + QueuePriority(v) + except ValueError: + valid = [e.value for e in QueuePriority] + raise ValueError(f"Invalid priority '{v}'. Must be one of: {valid}") + return v + class QueueItemOut(BaseModel): model_config = ConfigDict(from_attributes=True)