🗃️ Make archiving tables/applications a personal option - #2476
Open
AndyScherzinger wants to merge 8 commits into
Open
🗃️ Make archiving tables/applications a personal option#2476AndyScherzinger wants to merge 8 commits into
AndyScherzinger wants to merge 8 commits into
Conversation
AndyScherzinger
force-pushed
the
feat/2125/personal-archiving-option
branch
5 times, most recently
from
April 12, 2026 15:34
008f4f3 to
0e2bbdc
Compare
AndyScherzinger
force-pushed
the
feat/2125/personal-archiving-option
branch
2 times, most recently
from
April 12, 2026 18:56
d3fce3e to
fd235a6
Compare
AndyScherzinger
marked this pull request as ready for review
April 12, 2026 19:36
AndyScherzinger
requested review from
benjaminfrueh,
jancborchardt,
marcoambrosini and
samin-z
April 15, 2026 22:19
jancborchardt
previously requested changes
Apr 28, 2026
Member
There was a problem hiding this comment.
Looks generally nice, 2 details
- I’d say to use outline icons instead of filled for both cases, archiving and unarchiving
- In the cases of "Archive app" and "Unarchive app", the sorting of actions in the menu is off. We always recommend the destructive action (Delete) to be the very last, and then the next most destructive like Archive could be directly above it.
AndyScherzinger
force-pushed
the
feat/2125/personal-archiving-option
branch
from
April 28, 2026 13:13
fd235a6 to
ba16212
Compare
AndyScherzinger
force-pushed
the
feat/2125/personal-archiving-option
branch
4 times, most recently
from
April 28, 2026 20:06
840a1ab to
086aad3
Compare
AndyScherzinger
force-pushed
the
feat/2125/personal-archiving-option
branch
from
September 4, 2026 16:53
a7be73c to
9698f18
Compare
Member
Author
|
@samin-z regarding #2476 (comment) Fixed in 6f4140f Instead of extending the middleware's numeric whitelist as suggested, the two endpoints now pass typeParam: 'context' like every other context endpoint in the controller, so the existing string-based context detection in PermissionMiddleware applies. |
AndyScherzinger
force-pushed
the
feat/2125/personal-archiving-option
branch
from
September 4, 2026 18:18
db76d80 to
faf39c4
Compare
5 tasks
AndyScherzinger
force-pushed
the
feat/2125/personal-archiving-option
branch
2 times, most recently
from
September 5, 2026 06:30
24d6afb to
802890d
Compare
AndyScherzinger
force-pushed
the
feat/2125/personal-archiving-option
branch
11 times, most recently
from
September 12, 2026 09:27
86d5be7 to
36faeb9
Compare
Add the tables_archive_user table and the contexts.archived column, the UserArchive entity and mapper, and the archived flag on the Table and Context entities. Non-owner archive decisions are stored as per-user override rows, owner decisions live on the entity flag. Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Owner archiving toggles the shared entity flag inside a transaction and clears every per-user override; non-owners store or drop a personal override. The service also resolves the per-user flag onto entity collections and migrates overrides when ownership is transferred. Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
…ices Enrich read paths with the per-user resolved archived flag, add archive/unarchive, keep the state consistent across ownership transfer and deletion, hide archived contexts from the navigation, and expose the archived field in the API response definitions. Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Add the v2 table and context archive/unarchive endpoints (rate-limited, permission-checked, contexts addressed via the string typeParam) and their routes, resolve the per-user state in the single-item GET endpoints, and leave the archived state unchanged on partial updates through API v1 and the occ command. Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Remove stale archive overrides when a share is deleted, a group or circle membership ends, a receiver is deleted, or a user account is removed. Per-user access re-checks are handed to a background job so an unrelated request does not scale with the number of override holders. Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Add archive/unarchive actions to the table and context navigation items, a collapsible archived-applications section, and the matching store actions that guard against a missing local item. Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Cover the archive service and cleanup service, the mapper, the archive/unarchive controller endpoints, the background job, and the archive/unarchive UI flows for tables and applications. Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
AndyScherzinger
force-pushed
the
feat/2125/personal-archiving-option
branch
from
September 12, 2026 10:55
36faeb9 to
40aec24
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🖼️ Screenshots
The original ticket #2125 defined tables and views, while this PR tacked tables and apps. Given a clear view on how archived views should get displayed this could be added as a follow-up PR to not make this PR grow in review-size and complexity.
Summary
archivedflag on tables with a two-layer per-user model: an owner-level flag on the entity and a newtables_archive_usertable that stores individual user overrides, so archive state is resolved per-user at read time. When an owner archives a table or application, it is automatically treated as archived for every user with access, but any of those users may override this for themselves; an owner unarchiving resets the state for everyone by clearing all per-user overrides.tables_tables.archivedcolumn is repurposed from a simple global toggle into the owner-level signal, and the database migration converts all currently-archived tables into owner-archived entries to preserve existing data without disruption.ArchiveServicecentralizes all business logic for both resource types, four new API endpoints are split acrossApiTablesControllerandContextControllerfollowing existing naming conventions, and the frontend gains archive/unarchive actions in both navigation item menus alongside a new collapsible "Archived applications" section mirroring the already-existing "Archived tables" section.The database migration only covers the owner and direct user shares, not groups, etc. since they can't be resolved directly via SQL (think teams/groups). So in these cases archived tables would resurface until manually archived by the respective user. Also there is no cleanup for teams/groups, if a user is taken out of a team, the archive meta-info would not get deleted. Only simple but confusing way around it would be to prevent archiving/unarchiving for tables/apps where a user is neither the owner nor a user-share receiver. Expensive alternative would be a housekeeping job checking all these archive bits periodically, but that also sounds expensive with little use. Else we would need to consume a team/group changes event and check if some cleanup is needed. WDYT?
🏁 Checklist
/backport to stableX.X🤖 AI (if applicable)