npm installnpm run init-dbThis creates sample donation data spanning two weeks with various donors and recipients.
npm startnpm run lintThe API will be available at http://localhost:3000
curl http://localhost:3000/healthcurl -X POST http://localhost:3000/donations \
-H "Content-Type: application/json" \
-d '{
"amount": 100,
"donor": "John Doe",
"recipient": "Red Cross"
}'curl "http://localhost:3000/stats/daily?startDate=2024-02-12&endDate=2024-02-22"curl "http://localhost:3000/stats/weekly?startDate=2024-02-12&endDate=2024-02-22"curl "http://localhost:3000/stats/summary?startDate=2024-02-12&endDate=2024-02-22"curl "http://localhost:3000/stats/donors?startDate=2024-02-12&endDate=2024-02-22"curl "http://localhost:3000/stats/recipients?startDate=2024-02-12&endDate=2024-02-22"src/
├── config/
│ └── stellar.js # Configuration management
├── routes/
│ ├── app.js # Express app setup
│ ├── donation.js # Donation endpoints
│ ├── stats.js # Stats endpoints
│ ├── models/
│ │ ├── transaction.js # Transaction model (JSON-based)
│ │ └── user.js # User model (JSON-based)
│ └── services/
│ └── StatsService.js # Stats aggregation logic
└── scripts/
└── initDB.js # Database initialization
data/
├── donations.json # Donation transactions
└── users.json # User records
POST /donations- Create a new donation (Rate limited: 10 req/min)POST /donations/send- Send XLM and record donation (Rate limited: 10 req/min)POST /donations/verify- Verify a transaction (Rate limited: 30 req/min)GET /donations- Get all donationsGET /donations/:id- Get a specific donationGET /donations/recent- Get recent donationsGET /donations/limits- Get donation amount limitsPATCH /donations/:id/status- Update donation status
Donation creation and verification endpoints are rate limited to prevent abuse:
- Creation endpoints: 10 requests per minute per IP
- Verification endpoint: 30 requests per minute per IP
- Exceeded requests return HTTP 429 with retry information
- See Rate Limiting Documentation for details
GET /stats/daily- Daily aggregated volumeGET /stats/weekly- Weekly aggregated volumeGET /stats/summary- Overall summary statisticsGET /stats/donors- Stats grouped by donorGET /stats/recipients- Stats grouped by recipient
The database initialization script creates 14 sample donations across 2 weeks:
Week 1 (Feb 12-15):
- 7 transactions
- Total volume: 600
Week 2 (Feb 19-22):
- 7 transactions
- Total volume: 790
Recipients:
- Red Cross: 500
- UNICEF: 430
- WHO: 460
Change the port in .env:
PORT=3001
Run the initialization script:
npm run init-dbUse ISO format (YYYY-MM-DD or ISO 8601):
# Valid
?startDate=2024-02-12&endDate=2024-02-22
# Also valid
?startDate=2024-02-12T00:00:00Z&endDate=2024-02-22T23:59:59Z- Review
STATS_API.mdfor detailed API documentation - Explore the sample data in
data/donations.json - Implement additional features (filtering, pagination, etc.)
- Connect to actual Stellar blockchain
- Add authentication and authorization