payout retry lambda
This commit is contained in:
107
lambdas/payoutRetryProcessor/README.md
Normal file
107
lambdas/payoutRetryProcessor/README.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# Payout Retry Processor Lambda
|
||||
|
||||
Retries failed Stripe payouts daily. Triggered by EventBridge Scheduler at 7 AM EST.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Node.js 20.x
|
||||
- PostgreSQL database with rentals data
|
||||
- Stripe account with test API key (`sk_test_...`)
|
||||
|
||||
## Setup
|
||||
|
||||
1. Install shared dependencies:
|
||||
|
||||
```bash
|
||||
cd lambdas/shared
|
||||
npm install
|
||||
```
|
||||
|
||||
2. Install Lambda dependencies:
|
||||
```bash
|
||||
cd lambdas/payoutRetryProcessor
|
||||
npm install
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description |
|
||||
| ------------------- | ---------------------------------------------- |
|
||||
| `DATABASE_URL` | PostgreSQL connection string |
|
||||
| `STRIPE_SECRET_KEY` | Stripe API key (use `sk_test_...` for testing) |
|
||||
| `FRONTEND_URL` | For email template links |
|
||||
| `SES_FROM_EMAIL` | Sender email address |
|
||||
| `SES_FROM_NAME` | Sender display name |
|
||||
| `EMAIL_ENABLED` | Set to `true` to send emails |
|
||||
|
||||
## Local Testing
|
||||
|
||||
Run the Lambda locally using your dev environment:
|
||||
|
||||
```bash
|
||||
cd lambdas/payoutRetryProcessor
|
||||
node test-local.js
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
- Query your local database for failed payouts
|
||||
- Attempt Stripe transfers (use test mode!)
|
||||
- Send email notifications if `EMAIL_ENABLED=true`
|
||||
|
||||
## Creating Test Data
|
||||
|
||||
To test the retry logic, create a rental with failed payout status:
|
||||
|
||||
```sql
|
||||
UPDATE "Rentals"
|
||||
SET "payoutStatus" = 'failed'
|
||||
WHERE id = '<rental-id>'
|
||||
AND status = 'completed'
|
||||
AND "paymentStatus" = 'paid';
|
||||
```
|
||||
|
||||
## Verifying Results
|
||||
|
||||
After running the test:
|
||||
|
||||
1. Check console output for success/failure counts
|
||||
2. Query the database:
|
||||
```sql
|
||||
SELECT id, "payoutStatus", "stripeTransferId", "payoutProcessedAt"
|
||||
FROM "Rentals"
|
||||
WHERE id = '<rental-id>';
|
||||
```
|
||||
3. Check Stripe Dashboard for new transfers
|
||||
4. Check email inbox if emails are enabled
|
||||
|
||||
## AWS Deployment
|
||||
|
||||
When deploying to AWS:
|
||||
|
||||
1. Create Lambda function with Node.js 20.x runtime
|
||||
2. Set timeout to 60 seconds (batch processing)
|
||||
3. Set memory to 256 MB
|
||||
4. Configure EventBridge Scheduler with cron: `cron(0 12 * * ? *)` (7 AM EST = 12:00 UTC)
|
||||
5. Add environment variables listed above
|
||||
6. Configure DLQ for failed invocations
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
EventBridge Scheduler (7 AM EST daily)
|
||||
|
|
||||
v
|
||||
Lambda Function
|
||||
|
|
||||
+-- Query failed payouts from PostgreSQL
|
||||
|
|
||||
+-- For each failed payout:
|
||||
| +-- Reset status to "pending"
|
||||
| +-- Create Stripe transfer
|
||||
| +-- Update rental record
|
||||
| +-- Send email notification
|
||||
|
|
||||
v
|
||||
Return summary (success/failure counts)
|
||||
```
|
||||
Reference in New Issue
Block a user