Skip to content

feat: import validation (#162), CSV export (#161), status transitions (#160) - #173

Open
ZacLou wants to merge 4 commits into
Core-Foundry:mainfrom
ZacLou:feat/import-csv-transitions
Open

feat: import validation (#162), CSV export (#161), status transitions (#160)#173
ZacLou wants to merge 4 commits into
Core-Foundry:mainfrom
ZacLou:feat/import-csv-transitions

Conversation

@ZacLou

@ZacLou ZacLou commented Aug 28, 2026

Copy link
Copy Markdown

Summary

This PR implements three GrantFox Third Campaign issues:

Issue #162: Implement Import Validation for Bulk Grant Uploads

  • Created import-validation.ts with schema-driven row validation
  • Supports field types: string, number, boolean, iso_date, unix_timestamp
  • Validates required fields, min/max, maxLength, enum constraints
  • parseCSV() handles quoted fields, escaped quotes, embedded newlines
  • validateImportData() returns valid rows and errors separately
  • Default schema matches CreateTaskInput fields

Issue #161: Add CSV Export for Grant Data

  • Created csv-export.ts with exportTasksToCSV()
  • Excludes sensitive fields (poster wallet address) by default
  • escapeCSVValue() handles commas, quotes, newlines
  • generateExportFilename() with date stamp
  • getExportableFieldInfo() for UI field selection
  • Technologies joined with semicolons in export

Issue #160: Implement Grant Status Transitions

  • Created status-transitions.ts with controlled workflow
  • Defined valid transitions: open→in_progress→completed, disputed flow, cancelled→open
  • isValidTransition(), transitionStatus() (returns error message)
  • getNextStatuses(), getStatusWorkflowDescription()
  • isTerminalStatus() check

API Routes

  • POST /api/import — validate CSV/JSON bulk data before import
  • GET /api/export?format=csv — download CSV with optional filters

Tests

  • 8 tests for import validation (fields, rows, full import, CSV parsing)
  • 7 tests for CSV export (escaping, conversion, filtering, filename)
  • 9 tests for status transitions (valid, invalid, no-op, terminal)

Closes #162
Closes #161
Closes #160

鲁班七号 added 4 commits August 29, 2026 00:58
Core-Foundry#157), moderation queue (Core-Foundry#159)

- Core-Foundry#154: Levenshtein-based title similarity + org/description overlap detection
  Flags potential duplicates for admin review without blocking creation
- Core-Foundry#157: Structured eligibility fields (location, applicant type, project stage,
  team size, custom requirements) with validation and display formatting
- Core-Foundry#159: Admin moderation queue with enqueue/list/approve/reject/dismiss
  Auto-enqueues new tasks and duplicate flags for review
- Integrated into createTask: duplicate detection + auto-moderation on creation
- Added API routes: GET /api/moderation, GET/POST /api/moderation/:itemId
- 30+ unit tests covering all three features
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.

Implement Import Validation for Bulk Grant Uploads Implement Grant Status Transitions Add CSV Export for Grant Data

1 participant