amo-server/docs/implementation-status.md
Maxim Snesarev 33d6bb7ebd Refactor AMO CRM Data Collection Service to use PostgreSQL
- Updated database configuration to switch from SQLite to PostgreSQL, including changes to alembic.ini, Docker Compose, and environment settings.
- Refactored application code to utilize PostgreSQL database adapters, ensuring compatibility with the new database structure.
- Enhanced API routes and data handling to support the new database, including adjustments in data models and query logic.
- Introduced new job processing mechanisms for full synchronization of AMO CRM entities, leveraging FastStream for background tasks.
- Improved logging and error handling across the application to facilitate better monitoring and debugging.
- Removed obsolete SQLite adapter files and migrations, streamlining the project structure for PostgreSQL integration.
2025-11-05 00:38:37 +03:00

374 lines
13 KiB
Markdown

# AMO CRM Service - Implementation Status
## ✅ COMPLETED IMPLEMENTATION
All core functionality has been implemented and is ready for testing and deployment.
---
## 🎯 Completed Components
### 1. **AMO CRM API Client** ✅
- **File**: `adapters/amocrm_client.py`
- **Features**:
- Generic `fetch_entity_data()` method for all entity types
- Support for pagination, incremental updates, and filtering
- Proper type annotations
- All entity-specific methods (deals, contacts, companies, users, pipelines, events)
### 2. **Google Sheets Integration** ✅
- **File**: `adapters/google_sheets_client.py`
- **Features**:
- Service account authentication
- Write, clear, and append data operations
- Automatic sheet creation
- Header row formatting (bold, frozen)
- Batch updates support
### 3. **Sync Server** ✅
- **File**: `servers/sync_server.py`
- **Features**:
- Process sync jobs from FastStream queue
- Full sync and incremental sync support
- Integration with data ingestion endpoints
- Incremental update tracking via entity timestamps
- Batch processing with configurable sizes
### 4. **Job Server** ✅
- **File**: `servers/job_server.py`
- **Features**:
- Queue export and sync jobs via Redis/FastStream
- Job status tracking in database
- List and filter jobs
- Update job progress and status
### 5. **Export Server** ✅
- **File**: `servers/export_server.py`
- **Features**:
- Process export jobs from queue
- Retrieve data from database with date filtering
- Format data according to field mappings
- Export to Google Sheets with proper formatting
- Support for custom fields
- Job progress tracking
### 6. **API Routers** ✅
All routers are complete and functional:
#### a. AMO CRM Router (`routers/amocrm.py`)
- Fetch entities directly from AMO CRM
- Fetch custom field metadata
- **Sync endpoint** - fetches from AMO CRM and stores in database
- Connection info endpoint
#### b. Data Ingestion Router (`routers/data.py`)
- Endpoints for all entity types (deals, contacts, companies, users, pipelines, events)
- Support for custom fields and relationships
- Upsert, insert, and replace modes
#### c. Export Router (`routers/export.py`)
- Create and manage export configurations
- Start export jobs (async processing)
- Track job status and progress
- Queue sync jobs
- Schedule refresh jobs
### 7. **Background Workers** ✅
- **File**: `workers/broker.py`
- **Features**:
- Process export jobs
- Process sync jobs
- Process scheduled refresh jobs
- Dead letter queue handling
- Logging and error handling
### 8. **Task Scheduler** ✅
- **File**: `workers/scheduler.py`
- **Features**:
- Periodic data refresh for all entity types
- Configurable schedules (cron-based)
- Different intervals per entity type
---
## 🏗️ Architecture Overview
```
┌─────────────────────────────────────────────────────────────────┐
│ AMO CRM API │
│ (wecheap.amocrm.ru) │
└─────────────────────┬───────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ AMO CRM API Client │
│ (adapters/amocrm_client.py) │
└─────────────────────┬───────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ FastAPI Routers │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ AMO CRM │ │ Data │ │ Export │ │
│ │ Router │ │ Ingestion │ │ Router │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└───────────┬────────────────┬────────────────┬──────────────────┘
│ │ │
↓ ↓ ↓
┌─────────────────────────────────────────────────────────────────┐
│ SQLite Database │
│ (Users, Pipelines, Deals, Contacts, Companies, Events, │
│ Custom Fields, Export Configurations, Jobs) │
└───────────────────┬─────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ FastStream/Redis Message Broker │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Export Queue │ │ Sync Queue │ │Refresh Queue │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└───────────┬────────────────┬────────────────┬──────────────────┘
│ │ │
↓ ↓ ↓
┌─────────────────────────────────────────────────────────────────┐
│ Background Workers │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │Export Server │ │ Sync Server │ │ Scheduler │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└───────────┬─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Google Sheets API │
│ (Google Sheets Client) │
└─────────────────────────────────────────────────────────────────┘
```
---
## 🚀 How to Use
### 1. Setup Environment Variables
Create a `.env` file with:
```env
# AMO CRM Configuration
AMO_CRM_DOMAIN=wecheap.amocrm.ru
AMO_CRM_ACCESS_TOKEN=your_token_here
# Google Sheets Configuration
GOOGLE_SERVICE_ACCOUNT_FILE=credentials/google.json
GOOGLE_SCOPES=https://www.googleapis.com/auth/spreadsheets
# Redis Configuration
REDIS_URL=redis://localhost:6379/0
# API Configuration
API_V1_STR=/api/v1
LOG_LEVEL=INFO
```
### 2. Run Database Migrations
```bash
cd adapters/sqlite
alembic upgrade head
```
### 3. Start Services
#### Option A: Development (separate terminals)
```bash
# Terminal 1: FastAPI server
uvicorn app:app --reload --host 0.0.0.0 --port 8000
# Terminal 2: FastStream worker
python -m workers.broker
# Terminal 3 (optional): Task scheduler
python -m workers.scheduler
```
#### Option B: Docker Compose
```bash
docker-compose up -d
```
### 4. Test the Service
#### Fetch data from AMO CRM:
```bash
curl http://localhost:8000/api/v1/amocrm/fetch/deals?limit=10
```
#### Sync data to database:
```bash
curl -X POST http://localhost:8000/api/v1/amocrm/sync/deals?limit=250
```
#### Create export configuration:
```bash
curl -X POST http://localhost:8000/api/v1/export/configure \
-H "Content-Type: application/json" \
-d '{
"name": "Monthly Export",
"sheet_id": "YOUR_GOOGLE_SHEET_ID",
"entity_mappings": {
"deals": {
"sheet_name": "Deals",
"is_enabled": true,
"field_mapping": [
{"field_name": "id", "column": "A", "order": 1},
{"field_name": "name", "column": "B", "order": 2},
{"field_name": "price", "column": "C", "order": 3}
]
}
}
}'
```
#### Start export job:
```bash
curl -X POST http://localhost:8000/api/v1/export/start \
-H "Content-Type: application/json" \
-d '{"configuration_id": 1}'
```
#### Check job status:
```bash
curl http://localhost:8000/api/v1/export/status/1
```
---
## 📋 API Endpoints Summary
### AMO CRM Routes (`/api/v1/amocrm`)
- `GET /fetch/{entity_type}` - Fetch data directly from AMO CRM
- `GET /fetch/custom_fields/{entity_type}` - Fetch custom field metadata
- `GET /fetch/all` - Fetch all data for testing
- `POST /sync/{entity_type}` - Sync data from AMO CRM to database
- `GET /info` - Get connection info
### Data Ingestion Routes (`/api/v1/data`)
- `POST /users` - Ingest users
- `POST /pipelines` - Ingest pipelines
- `POST /companies` - Ingest companies
- `POST /contacts` - Ingest contacts
- `POST /deals` - Ingest deals
- `POST /events` - Ingest events
### Export Routes (`/api/v1/export`)
- `POST /configure` - Create export configuration
- `GET /configurations` - List configurations
- `POST /start` - Start export job
- `GET /status/{job_id}` - Get job status
- `GET /jobs` - List all jobs
- `POST /sync` - Queue sync job
- `POST /refresh/{entity_type}` - Schedule refresh
---
## 🔧 Configuration
### Google Sheets Setup
1. Create a service account in Google Cloud Console
2. Download the JSON key file
3. Save it to `credentials/google.json`
4. Share your Google Sheet with the service account email
### Redis Setup
For Docker:
```yaml
services:
redis:
image: redis:7-alpine
ports:
- "6379:6379"
```
For local development:
```bash
# Install Redis
# Ubuntu/Debian
sudo apt-get install redis-server
# macOS
brew install redis
# Start Redis
redis-server
```
---
## ⏰ Scheduled Tasks
The scheduler runs periodic data refreshes:
| Entity Type | Schedule | Cron Expression |
|------------|----------|----------------|
| Events | Every 2 hours | `0 */2 * * *` |
| Contacts | Every 4 hours | `0 */4 * * *` |
| Deals | Every 6 hours | `0 */6 * * *` |
| Companies | Every 8 hours | `0 */8 * * *` |
| Users | Every 12 hours | `0 */12 * * *` |
| Pipelines | Daily | `0 */24 * * *` |
---
## 🐛 Known Issues & Notes
### Type Checker Warnings
Some linter warnings about SQLAlchemy Column assignments are false positives. SQLAlchemy uses the descriptor protocol which confuses static type checkers. These don't affect runtime behavior.
### Google Sheets API
- Requires service account credentials
- Rate limits: 100 requests per 100 seconds per user
- Each sheet can have max 10 million cells
### Database
- SQLite is used for simplicity
- For production, consider PostgreSQL for better concurrency
- Regular backups recommended
---
## 📊 Next Steps
1. **Testing**:
- Test with real AMO CRM credentials
- Verify Google Sheets export
- Load testing with large datasets
2. **Deployment**:
- Set up production environment variables
- Configure NGINX reverse proxy
- Set up monitoring and logging
3. **Enhancements**:
- Add authentication/authorization
- Implement webhook receivers for real-time updates
- Add more entity types if needed
- Implement data validation and error recovery
4. **Documentation**:
- API documentation with OpenAPI/Swagger
- User guide for configuration
- Troubleshooting guide
---
## 🎉 Summary
The AMO CRM Data Collection Service is now **fully implemented** with:
✅ Complete AMO CRM API integration
✅ SQLite database with all entity types
✅ Background job processing with FastStream/Redis
✅ Google Sheets export functionality
✅ Scheduled data synchronization
✅ RESTful API with comprehensive endpoints
✅ Docker support for easy deployment
The service is ready for testing and deployment!