Skip to content

feat(documents): Move document between organizations - #1308

Open
Pallavikumarimdb wants to merge 5 commits into
papra-hq:mainfrom
Pallavikumarimdb:feat/move-document-between-organizations
Open

feat(documents): Move document between organizations #1308
Pallavikumarimdb wants to merge 5 commits into
papra-hq:mainfrom
Pallavikumarimdb:feat/move-document-between-organizations

Conversation

@Pallavikumarimdb

Copy link
Copy Markdown
Contributor

Description

Allows moving documents between organizations, handles clearing of organization-scoped tags/custom property values, updates FTS search indexes and share links, records activity logs, and integrates the Move dialog UI on the client.

Data Integrity & Scope Transitions

What is cleared during the move:

  • Tags: Any tags associated with the document are deleted.
  • Custom Property Values: Any custom properties set on the document are deleted.

Why do we delete this data?
Tags and custom property definitions in Papra are scoped to the organization (i.e. they belong directly to a specific organization ID). If we kept them linked to the document after moving it to a new organization, the document would refer to tags or properties that the new organization doesn't own or have access to, causing foreign key failures or data leakage.

What is preserved:

  • Document File & Metadata: The file name, MIME type, size, storage keys, sha256 hash, and main document properties are fully preserved.
  • Document Share Links: Public share links associated with the document are updated with the target organization's ID so they continue to work under the new owner organization.
  • FTS Search Index: The full-text search index entries are moved so the document is immediately searchable under the new organization.

Closes: #272

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR adds document moving between organizations across server persistence, API handling, activity logging, and client dialog wiring.

Changes

Move Document Feature

Layer / File(s) Summary
Event contracts and activity logging
apps/papra-server/src/modules/documents/documents.events.types.ts, apps/papra-server/src/modules/documents/document-activity/document-activity.constants.ts, apps/papra-server/src/modules/documents/events/activity-log.document-moved.ts, apps/papra-server/src/modules/app/events/events.handlers.ts
Adds the document.moved event payload, the MOVED activity constant, the moved-activity handler, and event-handler registration.
Repository moveDocument transaction and tests
apps/papra-server/src/modules/documents/documents.repository.ts, apps/papra-server/src/modules/documents/documents.repository.test.ts, apps/papra-server/src/modules/app/database/database.test-utils.ts, apps/papra-server/src/modules/documents/documents.errors.ts
Adds the transactional repository move operation, related table cleanup/update logic, tests, file-backed test DB setup, and the same-organization error.
Move document use case and API route
apps/papra-server/src/modules/documents/documents.usecases.ts, apps/papra-server/src/modules/documents/documents.routes.ts
Adds the move use case and the new POST route with membership, size, storage-limit, and same-organization validation.
Client move dialog, service call, and dropdown wiring
apps/papra-client/src/modules/documents/documents.services.ts, apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx, apps/papra-client/src/modules/documents/components/document-management-dropdown.component.tsx, apps/papra-client/src/index.tsx, apps/papra-client/src/locales/en.dictionary.ts
Adds the client move service, dialog provider and dialog UI, dropdown trigger, app provider nesting, and move-related locale strings.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Related issue: #272

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: moving documents between organizations.
Description check ✅ Passed The description matches the implemented move-document feature and its side effects, including cleanup and UI integration.
Linked Issues check ✅ Passed The PR implements the document-move feature requested in #272, and the provided dependency note does not contradict the changes.
Out of Scope Changes check ✅ Passed The added client, server, and test changes all support the move-document feature; no unrelated scope is evident.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

Comment @coderabbitai help to get the list of available commands.

@Pallavikumarimdb
Pallavikumarimdb marked this pull request as ready for review July 2, 2026 13:25
@Pallavikumarimdb
Pallavikumarimdb requested a review from a team as a code owner July 2, 2026 13:25

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx`:
- Around line 14-24: Reset the selected target organization whenever
MoveDocumentDialog closes and when it is opened for a new document, because the
component’s createSignal state persists across opens in
MoveDocumentDialogProvider. Update the MoveDocumentDialog logic around
getTargetOrgId/setTargetOrgId so cancel, success, outside-close, and prop
changes clear the selection before the next open. While touching the dialog UI,
surface props.documentName in the title/body so the user can confirm which
document is being moved.
- Around line 59-64: The error handling in move-document-dialog.component.tsx is
surfacing raw backend text via error?.message, which bypasses localization.
Update the onError callback to always use a translated user-facing message
through t(...) (for example, a generic move failure string), and only log or
inspect the raw error separately if needed. Keep the fix within the move
dialog’s createToast error path so the UI remains consistent for all locales.

In `@apps/papra-server/src/modules/app/database/database.test-utils.ts`:
- Line 43: The test database helper is creating file-backed databases with
Math.random() and leaving behind stray test-*.db files. Update the database
setup in database.test-utils.ts, specifically the setupDatabase call that builds
the url, to use a stronger unique identifier and ensure cleanup is handled
either in the helper itself or in the tests that consume it. If cleanup is
intentionally external, confirm the generated files are ignored and purged, and
document that behavior near setupDatabase so it is clear where teardown happens.

In `@apps/papra-server/src/modules/documents/documents.repository.test.ts`:
- Around line 360-447: Add coverage in the moveDocument test block for the
ownership-mismatch guard and unchanged metadata. Extend
createDocumentsRepository/moveDocument tests to assert it rejects or throws when
sourceOrganizationId does not match the document’s current organizationId, and
verify the returned document keeps fields like name, originalName,
originalStorageKey, originalSha256Hash, and mimeType unchanged while only
organizationId changes. Use the existing moveDocument setup and
createInMemoryDatabase fixtures to keep the new cases close to the current
happy-path test.

In `@apps/papra-server/src/modules/documents/documents.repository.ts`:
- Around line 578-629: The `moveDocument` transaction currently assumes
`sourceOrganizationId` and `targetOrganizationId` are different, but that
protection only exists in the route layer. Add a same-organization guard inside
`moveDocument` itself, before the `db.transaction` work begins, so the
repository use case enforces its own contract. If the IDs are equal, fail fast
with the same kind of invalid-request/domain error used elsewhere in
`documents.repository.ts`, and keep the destructive deletes in
`documentsTagsTable` and `documentCustomPropertyValuesTable` from running.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: db83d287-4855-4d92-844b-6027b09a6ed8

📥 Commits

Reviewing files that changed from the base of the PR and between cfd18d2 and 7a298d4.

📒 Files selected for processing (14)
  • apps/papra-client/src/index.tsx
  • apps/papra-client/src/locales/en.dictionary.ts
  • apps/papra-client/src/modules/documents/components/document-management-dropdown.component.tsx
  • apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx
  • apps/papra-client/src/modules/documents/documents.services.ts
  • apps/papra-server/src/modules/app/database/database.test-utils.ts
  • apps/papra-server/src/modules/app/events/events.handlers.ts
  • apps/papra-server/src/modules/documents/document-activity/document-activity.constants.ts
  • apps/papra-server/src/modules/documents/documents.events.types.ts
  • apps/papra-server/src/modules/documents/documents.repository.test.ts
  • apps/papra-server/src/modules/documents/documents.repository.ts
  • apps/papra-server/src/modules/documents/documents.routes.ts
  • apps/papra-server/src/modules/documents/documents.usecases.ts
  • apps/papra-server/src/modules/documents/events/activity-log.document-moved.ts

Comment thread apps/papra-server/src/modules/app/database/database.test-utils.ts Outdated
Comment thread apps/papra-server/src/modules/documents/documents.repository.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/papra-server/src/modules/documents/documents.repository.ts (1)

594-632: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Move the underlying file on organization transfer. buildOriginalDocumentKey prefixes organizationId, so this leaves the document row in the target org while the file stays under the source org namespace. Update originalStorageKey and move/copy the object as part of this transaction.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/papra-server/src/modules/documents/documents.repository.ts` around lines
594 - 632, The organization transfer flow in documents.repository.ts updates the
document row and related tables but leaves the underlying file in the old org
namespace because buildOriginalDocumentKey includes organizationId. In the
transaction around the document move logic, update originalStorageKey to the
target organization’s key and move/copy the stored object so the file is
relocated with the document. Use the existing documentId transfer path and the
surrounding tx block in the repository method to keep the row, metadata, and
storage key in sync.
♻️ Duplicate comments (2)
apps/papra-server/src/modules/documents/documents.repository.test.ts (1)

359-478: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Missing ownership-mismatch and metadata-preservation coverage.

The previously requested test cases (rejecting when sourceOrganizationId doesn't match the document's actual org, and asserting unrelated fields like name/originalStorageKey/mimeType survive the move unchanged) still aren't present. Only the success path and the same-organization guard are covered.

✅ Suggested additional test case
+    test('throws when the document does not belong to the source organization', async () => {
+      const { db } = await createInMemoryDatabase({
+        organizations: [
+          { id: 'org-1', name: 'Org 1' },
+          { id: 'org-2', name: 'Org 2' },
+        ],
+        documents: [
+          {
+            id: 'doc-1',
+            organizationId: 'org-1',
+            name: 'Doc 1',
+            originalName: 'doc-1.pdf',
+            originalStorageKey: 'key-1',
+            originalSha256Hash: 'hash1',
+            mimeType: 'application/pdf',
+          },
+        ],
+      });
+
+      const documentsRepository = createDocumentsRepository({ db });
+
+      await expect(
+        documentsRepository.moveDocument({
+          documentId: 'doc-1',
+          sourceOrganizationId: 'org-2',
+          targetOrganizationId: 'org-1',
+        }),
+      ).rejects.toThrow();
+    });
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/papra-server/src/modules/documents/documents.repository.test.ts` around
lines 359 - 478, Add the missing moveDocument test coverage in
documents.repository.test.ts: the current describe('moveDocument') block only
checks the success path and same-organization guard, but it still lacks a case
for sourceOrganizationId not matching the document’s actual organization and a
case asserting metadata preservation. Extend
createDocumentsRepository/moveDocument tests to verify the repository rejects
ownership mismatches, and in the successful move path confirm unrelated document
fields such as name, originalStorageKey, and mimeType remain unchanged after the
organization transfer.
apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx (1)

65-70: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Raw backend error message still surfaced, bypassing i18n.

error?.message is shown verbatim on failure, which will display untranslated/technical backend text to non-English users. This was previously flagged and remains unaddressed.

💬 Suggested fix
     onError: (error: any) => {
       createToast({
-        message: error?.message || t('documents.move.error'),
+        message: t('documents.move.error'),
         type: 'error',
       });
     }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx`
around lines 65 - 70, The move document error handling in
move-document-dialog.component.tsx is still surfacing raw backend text via the
onError callback. Update the error toast logic to always use the translated
fallback from t('documents.move.error') for user-facing messaging, and only log
or inspect error?.message internally if needed; keep the behavior localized by
changing the onError handler and createToast call in MoveDocumentDialog.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx`:
- Line 84: The DialogTitle in move-document-dialog.component.tsx hardcodes the
colon separator outside the translation, which bypasses localization. Update the
documents.move.title usage so the document name is passed through the i18n call
as an interpolated value, and adjust the translation key/value to include the
full localized title format rather than concatenating with a literal separator.

---

Outside diff comments:
In `@apps/papra-server/src/modules/documents/documents.repository.ts`:
- Around line 594-632: The organization transfer flow in documents.repository.ts
updates the document row and related tables but leaves the underlying file in
the old org namespace because buildOriginalDocumentKey includes organizationId.
In the transaction around the document move logic, update originalStorageKey to
the target organization’s key and move/copy the stored object so the file is
relocated with the document. Use the existing documentId transfer path and the
surrounding tx block in the repository method to keep the row, metadata, and
storage key in sync.

---

Duplicate comments:
In
`@apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx`:
- Around line 65-70: The move document error handling in
move-document-dialog.component.tsx is still surfacing raw backend text via the
onError callback. Update the error toast logic to always use the translated
fallback from t('documents.move.error') for user-facing messaging, and only log
or inspect error?.message internally if needed; keep the behavior localized by
changing the onError handler and createToast call in MoveDocumentDialog.

In `@apps/papra-server/src/modules/documents/documents.repository.test.ts`:
- Around line 359-478: Add the missing moveDocument test coverage in
documents.repository.test.ts: the current describe('moveDocument') block only
checks the success path and same-organization guard, but it still lacks a case
for sourceOrganizationId not matching the document’s actual organization and a
case asserting metadata preservation. Extend
createDocumentsRepository/moveDocument tests to verify the repository rejects
ownership mismatches, and in the successful move path confirm unrelated document
fields such as name, originalStorageKey, and mimeType remain unchanged after the
organization transfer.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 86cb095c-64d2-4a5e-b232-404fda0a73de

📥 Commits

Reviewing files that changed from the base of the PR and between 7a298d4 and 80447bc.

📒 Files selected for processing (4)
  • apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx
  • apps/papra-server/src/modules/documents/documents.errors.ts
  • apps/papra-server/src/modules/documents/documents.repository.test.ts
  • apps/papra-server/src/modules/documents/documents.repository.ts

@Pallavikumarimdb
Pallavikumarimdb force-pushed the feat/move-document-between-organizations branch from 80447bc to e6e1631 Compare July 4, 2026 10:13

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/papra-server/src/modules/documents/documents.routes.ts`:
- Around line 567-574: The same-organization validation in the documents route
duplicates the repository’s shared guard and emits a different error shape.
Update the `documents.routes.ts` move flow to use
`createDocumentSameOrganizationError` from `documents.errors.ts` instead of
constructing the inline `createError` in the same-organization check, so the
route and `moveDocument` return the same `code` and message consistently.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 90857687-042a-4971-bbb0-7ee65fe98873

📥 Commits

Reviewing files that changed from the base of the PR and between 80447bc and e6e1631.

📒 Files selected for processing (15)
  • apps/papra-client/src/index.tsx
  • apps/papra-client/src/locales/en.dictionary.ts
  • apps/papra-client/src/modules/documents/components/document-management-dropdown.component.tsx
  • apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx
  • apps/papra-client/src/modules/documents/documents.services.ts
  • apps/papra-server/src/modules/app/database/database.test-utils.ts
  • apps/papra-server/src/modules/app/events/events.handlers.ts
  • apps/papra-server/src/modules/documents/document-activity/document-activity.constants.ts
  • apps/papra-server/src/modules/documents/documents.errors.ts
  • apps/papra-server/src/modules/documents/documents.events.types.ts
  • apps/papra-server/src/modules/documents/documents.repository.test.ts
  • apps/papra-server/src/modules/documents/documents.repository.ts
  • apps/papra-server/src/modules/documents/documents.routes.ts
  • apps/papra-server/src/modules/documents/documents.usecases.ts
  • apps/papra-server/src/modules/documents/events/activity-log.document-moved.ts

Comment thread apps/papra-server/src/modules/documents/documents.routes.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/papra-server/src/modules/documents/documents.repository.ts (1)

619-676: 🗄️ Data Integrity & Integration | 🔴 Critical | 🏗️ Heavy lift

Move the storage mutation out of the transaction

The file copy/delete happens before the remaining DB writes. If a later statement fails, the SQL transaction rolls back but the storage changes do not, leaving the document row and file state out of sync. Defer the move until after the DB work succeeds, or add compensating cleanup.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/papra-server/src/modules/documents/documents.repository.ts` around lines
619 - 676, The move logic in documents.repository.ts is performing storage
copy/delete inside the same transaction as the database updates, which can leave
file state out of sync if later tx writes fail. Refactor the document move flow
around the document move/update method so the tx only handles DB mutations
first, then perform the documentsStorageService file copy/delete after the
transaction succeeds, or add a compensating rollback path for the storage
operations. Keep the existing behavior tied to documentToMove,
documentsStorageService, saveFile, deleteFile, and the tx update/delete calls.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/papra-client/src/locales/en.dictionary.ts`:
- Line 450: The locale entry for documents.move.title is using single-brace
placeholder syntax, which won’t be interpolated by the translation call. Update
the documents.move.title string in the en.dictionary locale to use double-brace
interpolation so the existing t('documents.move.title', { name:
props.documentName }) usage in the move dialog renders the document name
correctly.

---

Outside diff comments:
In `@apps/papra-server/src/modules/documents/documents.repository.ts`:
- Around line 619-676: The move logic in documents.repository.ts is performing
storage copy/delete inside the same transaction as the database updates, which
can leave file state out of sync if later tx writes fail. Refactor the document
move flow around the document move/update method so the tx only handles DB
mutations first, then perform the documentsStorageService file copy/delete after
the transaction succeeds, or add a compensating rollback path for the storage
operations. Keep the existing behavior tied to documentToMove,
documentsStorageService, saveFile, deleteFile, and the tx update/delete calls.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 99bf4f13-dfe0-4ff2-a1c2-aa0f3351487e

📥 Commits

Reviewing files that changed from the base of the PR and between e6e1631 and 141caf8.

📒 Files selected for processing (7)
  • apps/papra-client/src/locales/en.dictionary.ts
  • apps/papra-client/src/modules/documents/components/move-document-dialog.component.tsx
  • apps/papra-server/src/modules/app/database/database.test-utils.ts
  • apps/papra-server/src/modules/documents/documents.repository.test.ts
  • apps/papra-server/src/modules/documents/documents.repository.ts
  • apps/papra-server/src/modules/documents/documents.routes.ts
  • apps/papra-server/src/modules/documents/documents.usecases.ts

Comment thread apps/papra-client/src/locales/en.dictionary.ts Outdated
…ck on document move and fix localization interpolation syntax

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/papra-client/src/locales/en.dictionary.ts`:
- Line 450: The interpolation in the documents.move.title dictionary entry is
inconsistent with the rest of the locale file because it uses an unspaced
placeholder. Update the documents.move.title string in en.dictionary.ts to match
the existing interpolation style used by other entries such as those with {{
name }} and {{ provider }}, keeping the same key but normalizing the placeholder
formatting.

In `@apps/papra-server/src/modules/documents/documents.repository.ts`:
- Around line 621-642: In the document move flow inside documents.repository.ts,
the current logic in the file copy block skips saving when
documentsStorageService.fileExists returns false but still allows the
transaction to update originalStorageKey to the new value. Update the move path
around the fileExists/getFileStream/saveFile sequence so that a missing source
file causes the move to fail and aborts the transaction instead of proceeding
with the DB pointer update. Use the existing documentToMove,
documentsStorageService, and newStorageKey handling to ensure the metadata
update only happens after a successful file copy.
- Around line 694-710: The rollback path in documents.repository.ts is deleting
the newly moved file even after the database update has already succeeded, which
leaves the document pointing at missing storage. Update the move flow around the
save/delete logic in the repository method so that newStorageKey is only cleaned
up when the DB transaction or save fails before commit, and never from the outer
catch after the commit has succeeded. Keep the cleanup for
documentToMove.originalStorageKey on success, and adjust the
savedNewFile/documentsStorageService error handling so the catch only rolls back
uncommitted changes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 08ca8ebe-527b-4e8c-97df-cf8aa4e4870a

📥 Commits

Reviewing files that changed from the base of the PR and between 141caf8 and eab26f2.

📒 Files selected for processing (3)
  • apps/papra-client/src/locales/en.dictionary.ts
  • apps/papra-server/src/modules/documents/documents.repository.test.ts
  • apps/papra-server/src/modules/documents/documents.repository.ts

Comment thread apps/papra-client/src/locales/en.dictionary.ts Outdated
Comment thread apps/papra-server/src/modules/documents/documents.repository.ts
Comment thread apps/papra-server/src/modules/documents/documents.repository.ts
@cla-signer

cla-signer Bot commented Aug 18, 2026

Copy link
Copy Markdown

Contributor License Agreement

✅ Everyone who contributed to this pull request has signed the CLA for it.

@cla-signer cla-signer Bot added the cla: signed CLA have been signed for this contribution label Aug 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla: signed CLA have been signed for this contribution

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Move document between organizations

1 participant