Add GET /api/campaigns/:id/contributors endpoint returning grouped contributor totals with refunded status. SQL GROUP BY contributor. 404 for invalid ID. Empty [] for no pledges. Document in README.md.
- Add ContributorSummary interface
- Edit frontend/src/types/campaign.ts
- Add ContributorSummary interface, getContributorSummary function with GROUP BY SQL
- Edit backend/src/services/campaignStore.ts
- Added GET /api/campaigns/:id/contributors route + getContributorSummary import
- Edit backend/src/index.ts
- Added API reference with response shape
- Edit README.md
- Add listCampaignContributors(id): Promise<ContributorSummary[]>
- Hook up ContributorSummary component if exists
- Edit frontend/src/services/api.ts
- Edit frontend/src/components/ContributorSummary.tsx (if relevant)
- Backend: curl /api/campaigns/1/contributors → array, /api/invalid → 404
- Verify empty [], refunded status correct
- Frontend: manual test in dev
- Update TODO
Ready for implementation.