Hooray! Updates to updates!
This commit is contained in:
parent
85b0e576c7
commit
bcf14cf251
3 changed files with 106 additions and 33 deletions
|
|
@ -9,6 +9,28 @@ from crudkit.core import normalize_payload
|
|||
|
||||
bp_entry = Blueprint("entry", __name__)
|
||||
|
||||
def _apply_worklog_updates(worklog, updates, delete_ids):
|
||||
note_cls = type(worklog).updates.property.mapper.class_
|
||||
note_svc = crudkit.crud.get_service(note_cls)
|
||||
sess = note_svc.session
|
||||
|
||||
existing = {u.id: u for u in worklog.updates if not getattr(u, "is_deleted", False)}
|
||||
|
||||
for item in updates:
|
||||
uid = item.get("id")
|
||||
content = (item.get("content") or "").strip()
|
||||
if not content and not uid:
|
||||
continue
|
||||
if uid:
|
||||
# per-note version log preserved, but commit deferred.
|
||||
note_svc.update(uid, {"content": content}, actor="bulk_child_update", commit=False)
|
||||
else:
|
||||
note_svc.create({"work_log_id": worklog.id, "content": content}, actor="bulk_child_create", commit=False)
|
||||
|
||||
for uid in delete_ids:
|
||||
if uid in existing:
|
||||
note_svc.delete(uid, actor="bulk_child_delete", commit=False)
|
||||
|
||||
def init_entry_routes(app):
|
||||
|
||||
@bp_entry.get("/entry/<model>/<int:id>")
|
||||
|
|
@ -168,6 +190,9 @@ def init_entry_routes(app):
|
|||
cls = crudkit.crud.get_model(model)
|
||||
payload = normalize_payload(request.get_json(), cls)
|
||||
|
||||
updates = payload.pop("updates", None) or []
|
||||
delete_ids = payload.pop("delete_update_ids", None) or []
|
||||
|
||||
params = {}
|
||||
if model == "inventory":
|
||||
pass
|
||||
|
|
@ -197,13 +222,19 @@ def init_entry_routes(app):
|
|||
else:
|
||||
raise TypeError("Invalid model.")
|
||||
|
||||
print(payload)
|
||||
|
||||
service = crudkit.crud.get_service(cls)
|
||||
service.update(id, data=payload, actor="update_entry")
|
||||
sess = service.session
|
||||
|
||||
obj = service.update(id, data=payload, actor="update_entry", commit=False)
|
||||
|
||||
if model == "worklog" and (updates or delete_ids):
|
||||
_apply_worklog_updates(obj, updates, delete_ids)
|
||||
|
||||
sess.commit()
|
||||
|
||||
return {"status": "success", "payload": payload}
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return {"status": "failure", "error": str(e)}
|
||||
|
||||
app.register_blueprint(bp_entry)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue