BuyingAgent/backend/app/discovery/definitions.py
Lars b276758ee1
All checks were successful
Deploy Development / deploy (push) Successful in 1m19s
Test Suite / pytest-backend (push) Successful in 31s
Test Suite / smoke-dev (push) Successful in 0s
Test Suite / frontend-checks (push) Successful in 28s
Stelle den Frontend-MVP und die v0.3-API auf develop bereit, damit Dev API und PWA zusammen deployen.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-04 13:04:59 +02:00

52 lines
2.0 KiB
Python

from __future__ import annotations
from typing import Any
from uuid import UUID, uuid4
from sqlalchemy import select
from sqlalchemy.orm import Session
from app.persistence.discovery_models import CriterionDefinitionRecord
def get_definition_by_key(session: Session, key: str) -> CriterionDefinitionRecord | None:
return session.scalars(select(CriterionDefinitionRecord).where(CriterionDefinitionRecord.key == key)).first()
def get_definition(session: Session, definition_id: UUID) -> CriterionDefinitionRecord | None:
return session.get(CriterionDefinitionRecord, definition_id)
def upsert_definition(session: Session, payload: dict[str, Any]) -> CriterionDefinitionRecord:
key = str(payload["key"])
existing = get_definition_by_key(session, key)
if existing is not None:
if payload.get("label"):
existing.label = str(payload["label"])
if payload.get("scoring_attribute_key"):
existing.scoring_attribute_key = str(payload["scoring_attribute_key"])
if payload.get("product_category_id"):
existing.product_category_id = str(payload["product_category_id"])
if payload.get("origin"):
existing.origin = str(payload["origin"])
if payload.get("source"):
existing.source = str(payload["source"])
return existing
row = CriterionDefinitionRecord(
id=payload.get("id") or uuid4(),
key=key,
origin=str(payload.get("origin") or "SOURCE"),
source=payload.get("source"),
product_category_id=payload.get("product_category_id"),
label=str(payload.get("label") or key),
value_type=str(payload["value_type"]),
unit=payload.get("unit"),
semantic=payload.get("semantic"),
category=payload.get("category") or payload.get("product_category_id"),
description=payload.get("description"),
scoring_attribute_key=payload.get("scoring_attribute_key"),
)
session.add(row)
session.flush()
return row