fix(rename): refresh Folder.name on webhook-driven directory rename

handle_directory_rename updated Folder.path but left Folder.name as
the old leaf basename. Path is load-bearing; name is purely display,
but a stale name shows wrong text in the sidebar tree until the next
manual refresh. Now sets folder.name = basename(new_prefix) on the
renamed folder itself; descendants keep their existing names because
the rename was on an ancestor (only their paths shift).

Same correctness as the existing PATCH /folders/{id} endpoint, which
also updates both name and path.
This commit is contained in:
Claudio
2026-05-11 13:46:06 +02:00
parent 2a5759cc8d
commit f4618ddf97

View File

@@ -641,9 +641,18 @@ async def handle_directory_rename(old_dirpath: str, new_dirpath: str) -> dict:
)
)
)).scalars().all()
# Path is load-bearing (FKs join on it implicitly via filepath),
# name is purely display. The renamed folder itself gets its
# leaf basename refreshed too so the sidebar tree doesn't show
# stale text. Descendant folders keep their existing name
# because the rename was on the ancestor — only the path changes.
new_basename = os.path.basename(new_prefix)
for f in folders:
f.path = new_prefix if f.path == old_prefix else \
new_prefix + f.path[len(old_prefix):]
if f.path == old_prefix:
f.path = new_prefix
f.name = new_basename
else:
f.path = new_prefix + f.path[len(old_prefix):]
source_roots = (await session.execute(
select(SourceRoot).where(SourceRoot.path == old_prefix)