Plan · plot-app
Delete stops being final. A project waits in Trash for 30 days, then a nightly job removes it.
Delete moves a project to Trash for 30 days.
Delete sets deleted_at. It removes no rows.
Every project read skips trashed rows.
AND p.deleted_at IS NULL here. I found no read that skips this scope, but I did not open all 14 callers.Restore puts a project back with its members and tasks.
A nightly job deletes projects older than 30 days.
The job removes the project's files from storage.
Shared: one column and one index.
Not changing: billing, exports, and API keys.