Generic CRUD works now!
This commit is contained in:
parent
462b86c583
commit
e149a8d117
4 changed files with 97 additions and 22 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue