Repository navigation
feat: export all project contacts as CSV - #526
Open
Pratham2511 wants to merge 1 commit into
Open
Pratham2511 wants to merge 1 commit into
Pratham2511 wants to merge 1 commit into
Conversation
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.
Description
Adds Export CSV to Contacts for the entire authenticated project, including contacts beyond the visible page and custom fields found on later pages. The dialog explains that search, filters and selected rows do not limit the export.
A dedicated BullMQ worker reads indexed batches of 100, snapshots rows to a private temporary file and uploads CSV in bounded multipart buffers. Columns are deterministic; quoting, Unicode, null/nested values and spreadsheet formula protection are covered. Authenticated downloads enforce project membership and expire after 24 hours. Queued cancellation/expiry supports immediate restart; active work retains its lock until cleanup.
Self-hosted setup and CSV semantics are documented in CONTRIBUTING.md. The worker requires temporary disk space and permissions to manage a separate private
<S3_BUCKET>-contact-exportsbucket. It requests one-day expiry and incomplete-upload abort rules; operators must verify backend support. Concurrent edits are not a point-in-time backup. XLSX and a column selector are outside this PR.Type of Change
feat:New feature (MINOR version bump)fix:Bug fix (PATCH version bump)feat!:Breaking change - new feature (MAJOR version bump)fix!:Breaking change - bug fix (MAJOR version bump)docs:Documentation update (no version bump)chore:Maintenance/dependencies (no version bump)refactor:Code refactoring (no version bump)test:Adding tests (no version bump)perf:Performance improvement (PATCH version bump)Testing
Independent verification on the unchanged patch, using the existing CI profile:
e0b4faf:yarn test:run— 1,387/1,387 pass.yarn test:run— 1,422/1,422 pass.The earlier six local failures were reproduced in a mismatched setup. PostgreSQL used Asia/Kolkata and
CI=truewas absent; the cutoff timezone effect was independently reproduced. Corrected runs use Node 20.20.2, PostgreSQL 16.15, Redis 7.4.11 and the CI MinIO release, UTC, the existing CI performance profile and unchanged four-worker/30-second limits. Earlier near-floor benchmark and resource-timeout failures remain recorded; no checks, dependencies or unrelated source were changed. Native local services differ from the hosted container environment; remote candidate CI is not yet verified.Existing unmasked build limitations remain disclosed and were not rerun: direct
yarn workspace api buildcannot findtsc, and wiki/combined build lacksopenapi.local.json. Passing root typecheck/dashboard build does not establish an all-app build pass; CI masks its separate final combined build with|| true.Actual day-long deletion, crash-abandoned upload/temporary-file recovery, million-row heap behavior and Microsoft Excel remain unverified. The earlier Silo backend omitted the requested abort-incomplete-upload rule. Handled upload failures abort correctly; this does not establish crash cleanup.
Checklist
Related Issues
Closes #461