from typing import Any, Mapping from ..slugify import slugify def row_columns_and_values( definition: dict[str, Any], form_data: Mapping[str, str] ) -> tuple[list[str], list[int | float | str | None]]: """Traduit les données d'un formulaire généré en (colonnes, valeurs) prêtes pour un INSERT ou un UPDATE — factorisé pour que les deux partagent exactement la même logique de conversion de type.""" cols: list[str] = [] values: list[int | float | str | None] = [] for f in definition["fields"]: fname = slugify(f["name"]).replace("-", "_") if f["type"] == "relation": col = f"{fname}_id" raw = form_data.get(col, "") values.append(int(raw) if raw else None) elif f["type"] == "booleen": values.append(1 if form_data.get(fname) == "on" else 0) col = fname elif f["type"] in ("nombre_entier", "nombre_decimal"): raw = form_data.get(fname, "") values.append((int(raw) if f["type"] == "nombre_entier" else float(raw)) if raw != "" else None) col = fname else: values.append(form_data.get(fname, "") or None) col = fname cols.append(col) return cols, values