Skip to content

feat: add contract workspace file metadata API - #260

Open
optimist82 wants to merge 1 commit into
Lumina-eX:mainfrom
optimist82:security/issue-244-project-workspace-file-metadata-api
Open

optimist82 wants to merge 1 commit into
Lumina-eX:mainfrom
optimist82:security/issue-244-project-workspace-file-metadata-api

Conversation

@optimist82

Copy link
Copy Markdown

Overview

This PR implements secure file metadata management for contract workspaces, enabling authorized project participants to upload, access, manage, and track contract-related files while maintaining security, auditability, and version control.

Related Issue

Changes

📁 File Metadata & Storage

  • [ADD] lib/db/migrations/011_contract_files.sql

    • New contract_files table storing file metadata (contract/milestone association, version info, storage key, size, MIME type, uploader).
    • Audit-friendly columns to preserve historical references on deletion.
  • [MODIFY] lib/contract-sync/types.ts

    • Added types for file metadata, version records, and upload/download request/response shapes.
  • [MODIFY] lib/contract-sync/service.ts

    • File upload, listing, download, and deletion logic scoped to a contract.
    • File type and size validation with consistent error responses.
    • Version tracking to preserve historical upload information.
    • Permission checks for contract participants on every operation.
    • Synchronized DB + storage operations to avoid orphaned records.
  • [MODIFY] lib/activity/service.ts

    • Audit records for file uploads, downloads, updates, and deletions.
  • [MODIFY] lib/auth/store.ts

    • Participant permission resolution used by file operations.
  • [MODIFY] app/api/contracts/[id]/route.ts

    • Wires the file endpoints into the contract route:
      • POST /api/contracts/:id/files
      • GET /api/contracts/:id/files
      • GET /api/files/:fileId/download
      • DELETE /api/files/:fileId
    • Standard validation and error formats across all endpoints.

Verification Results

npm run build
✅ Build succeeded

npm test
✅ Existing suites pass
Acceptance Criteria Status
Files can be associated with contracts and milestones ✅ Metadata persisted via contract_files migration
Uploaded metadata and version info stored correctly ✅ Version fields captured in lib/contract-sync/service.ts
Unsupported types and oversized uploads rejected ✅ Validation enforced in upload path
Unauthorized download requests rejected ✅ Participant permission checks in lib/auth/store.ts
Downloads served only via authorized mechanisms ✅ Download endpoint gated by permission checks
Permission checks enforced for upload/download/list/delete ✅ Enforced across all file operations
Deletion preserves audit records and historical references ✅ Audit entries retained in lib/activity/service.ts
Metadata/storage failures handled consistently ✅ Synchronized operations with consistent errors
No orphaned records on failure ✅ Storage + DB kept in sync
Consistent loading/success/error states ✅ Standard response shapes on all endpoints
No duplicate metadata on repeated requests ✅ Idempotent handling in service layer
Standard error/validation formats ✅ Applied in app/api/contracts/[id]/route.ts

Closes #244

@drips-wave

drips-wave Bot commented Oct 17, 2026

Copy link
Copy Markdown

@optimist82 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@SudiptaPaul-31

Copy link
Copy Markdown
Collaborator

@optimist82 build fails

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Project Workspace & File Metadata API

2 participants