# Deployment Guide

Complete guide for deploying LuckyChit to production.

---

## 📋 Prerequisites

- PostgreSQL 12+
- Node.js 14+
- PM2 (for process management)
- Flutter SDK (for mobile app)

---

## 🚀 Backend Deployment

### 1. Initial Setup

```bash
# Clone repository
cd /home/luckychit/apps/chitfund/backend

# Install dependencies
npm install

# Setup environment
cp env.example .env
nano .env  # Configure your settings
```

### 2. Database Setup

```bash
# Create database
sudo -u postgres psql
postgres=# CREATE DATABASE luckychit;
postgres=# CREATE USER luckychit WITH PASSWORD 'your_password';
postgres=# GRANT ALL PRIVILEGES ON DATABASE luckychit TO luckychit;
postgres=# \q
```

### 3. Apply Member Number Migration

**Option A: Using Node.js Script** (Easiest)
```bash
cd /home/luckychit/apps/chitfund/backend
node run-member-number-migration.js
```

**Option B: Using SQL File**
```bash
# Copy to accessible location
sudo cp migrations/20251106_add_member_number.sql /tmp/
sudo chmod 644 /tmp/20251106_add_member_number.sql

# Apply migration
sudo -u postgres psql -d luckychit -f /tmp/20251106_add_member_number.sql

# Clean up
sudo rm /tmp/20251106_add_member_number.sql
```

### 4. Start Backend with PM2

```bash
# Install PM2 globally (if not installed)
npm install -g pm2

# Start backend
pm2 start ecosystem.config.js

# Save PM2 configuration
pm2 save

# Setup auto-start on reboot
pm2 startup
# Follow the command it gives you
```

### 5. Verify Backend is Running

```bash
# Check status
pm2 status

# Check logs
pm2 logs chitfund-backend --lines 50

# Test health endpoint
curl http://localhost:3000/health
```

---

## 📱 Frontend Deployment

### Android APK

```bash
cd luckychit

# Build release APK
flutter build apk --release

# APK location:
# build/app/outputs/flutter-apk/app-release.apk
```

### iOS App

```bash
cd luckychit

# Build iOS
flutter build ios --release

# Then archive in Xcode
```

### Web Deployment

```bash
cd luckychit

# Build web
flutter build web --release

# Deploy files from:
# build/web/
```

---

## 🔄 Updating Production

### Update Backend

```bash
cd /home/luckychit/apps/chitfund/backend

# Pull latest code
git pull origin main

# Install any new dependencies
npm install

# Run migrations (if any)
node run-member-number-migration.js  # If not already applied

# Restart
pm2 restart chitfund-backend

# Check logs
pm2 logs chitfund-backend
```

### Update Frontend

```bash
cd luckychit

# Pull latest code
git pull origin main

# Get dependencies
flutter pub get

# Build new APK
flutter build apk --release

# Distribute to users
```

---

## 🔧 Troubleshooting

### Backend Won't Start

**Module Not Found Error**:
```bash
cd backend
rm -rf node_modules package-lock.json
npm install
pm2 restart chitfund-backend
```

**Database Connection Error**:
```bash
# Check PostgreSQL is running
sudo systemctl status postgresql

# Check credentials in .env file
cat .env | grep DB_

# Test connection
node test-db-connection.js
```

**Port Already in Use**:
```bash
# Find what's using port 3000
lsof -i :3000

# Stop old process
pm2 delete all
pm2 start ecosystem.config.js
```

---

### Migration Issues

**Permission Denied**:
- Use Node.js script: `node run-member-number-migration.js`
- Or copy SQL to /tmp first

**Peer Authentication Failed**:
- Use: `sudo -u postgres psql`
- Or configure md5 auth in pg_hba.conf

**Column Already Exists**:
- Migration was already applied, safe to ignore
- Verify: `SELECT member_number FROM group_members LIMIT 1;`

---

### Frontend Issues

**API Connection Error**:
- Check API URL in `lib/core/services/api_service.dart`
- Should be: `https://chitfund.deepteklabs.com/api`

**Member Numbers Not Showing**:
- Check backend migration was applied
- Check API response includes `member_number` field
- Restart both backend and frontend

---

## 📊 Health Checks

### Backend Health

```bash
# Check PM2 status
pm2 status

# Check if responding
curl https://chitfund.deepteklabs.com/health

# Check database
sudo -u postgres psql -d luckychit -c "SELECT COUNT(*) FROM users;"

# Check member numbers
sudo -u postgres psql -d luckychit -c "SELECT member_number FROM group_members LIMIT 5;"
```

### Frontend Health

```bash
# Build test
flutter build apk --debug

# Check for errors
flutter analyze

# Run on device
flutter run
```

---

## 🔐 Security Checklist

- [ ] Change default passwords
- [ ] Set strong JWT secret in .env
- [ ] Enable rate limiting in production
- [ ] Use HTTPS only
- [ ] Configure CORS properly
- [ ] Keep dependencies updated
- [ ] Regular database backups
- [ ] Monitor PM2 logs

---

## 📦 Environment Variables

### Required (.env file)

```bash
# Database
DB_HOST=localhost
DB_PORT=5432
DB_NAME=luckychit
DB_USER=luckychit
DB_PASSWORD=your_secure_password

# JWT
JWT_SECRET=your_very_long_secret_key_here
JWT_EXPIRY=7d

# Server
PORT=3000
NODE_ENV=production

# Optional
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100
```

---

## 📝 Maintenance Tasks

### Daily
- Monitor PM2 logs: `pm2 logs`
- Check disk space: `df -h`

### Weekly
- Review error logs
- Check database size
- Update dependencies if needed

### Monthly
- Database backup
- Review and archive old logs
- Check for security updates

---

## 🎯 Production Checklist

### Before Going Live
- [x] Database migration applied
- [x] Backend running on PM2
- [x] Backend health check passes
- [x] Frontend built and tested
- [x] Admin features working
- [x] Member numbers displaying
- [x] All CRUD operations tested
- [x] Authentication working
- [x] WhatsApp integration configured
- [x] Large fonts for accessibility

### After Deployment
- [ ] Monitor error logs
- [ ] Test with real users
- [ ] Gather feedback
- [ ] Document any issues
- [ ] Plan next iteration

---

## 📞 Quick Commands Reference

```bash
# Backend
pm2 restart chitfund-backend        # Restart
pm2 logs chitfund-backend           # View logs
pm2 status                          # Check status
npm install                         # Install deps

# Database
sudo -u postgres psql -d luckychit  # Connect
node run-member-number-migration.js # Migrate

# Frontend  
flutter pub get                     # Get deps
flutter build apk --release         # Build APK
flutter run                         # Run app
```

---

## ✅ Deployment Complete!

After following this guide:
- ✅ Backend running on PM2
- ✅ Database migrated with member numbers
- ✅ Frontend built and deployed
- ✅ All admin features working
- ✅ Ready for production use

**Your chitfund management system is live!** 🎉
