Generic CRUD works now!

This commit is contained in:
Yaro Kasear 2025-08-13 13:48:11 -05:00
parent 462b86c583
commit e149a8d117
4 changed files with 97 additions and 22 deletions

View file

@ -57,3 +57,52 @@ def list_items(model_name):
if want_html:
return render_template("fragments/_option_fragment.html", options=items)
return jsonify({"items": items})
@bp.post("/<model_name>/create")
def create_item(model_name):
Model = get_model_class(model_name)
payload = request.get_json(silent=True) or {}
if not payload:
return jsonify({"error": "Payload required"}), 422
try:
obj = call(Model, 'ui_create', db.session, payload=payload) \
or default_create(db.session, Model, payload)
except IntegrityError:
db.session.rollback()
return jsonify({"error": "Duplicate"}), 409
data = call(Model, 'ui_serialize', obj) or default_serialize(Model, obj)
want_html = (request.args.get('view') == 'option') or ("HX-Request" in request.headers)
if want_html:
return "Yo."
return jsonify(data), 201
@bp.post("/<model_name>/update")
def update_item(model_name):
Model = get_model_class(model_name)
payload = request.get_json(silent=True) or {}
try:
id_ = int(payload.get("id"))
except Exception:
return jsonify({"error": "Invalid id"}), 422
obj = call(Model, 'ui_update', db.session, id_=id_, payload=payload) \
or default_update(db.session, Model, id_, payload)
if not obj:
return jsonify({"error": "Note found"}), 404
return ("", 204)
@bp.post("/<model_name>/delete")
def delete_item(model_name):
Model = get_model_class(model_name)
payload = request.get_json(silent=True) or {}
ids = payload.get("ids") or []
try:
ids = [int(x) for x in ids]
except Exception:
return jsonify({"error": "Invalid ids"}), 422
try:
deleted = call(Model, 'ui_delete', db.session, ids=ids) \
or default_delete(db.session, Model, ids)
except IntegrityError as e:
db.session.rollback()
return jsonify({"error": "Constraint", "detail": str(e)}), 409
return jsonify({"deleted": deleted}), 200