# EonaCat.Sync REST API Documentation ## Overview The EonaCat.Sync REST API provides endpoints for managing file and database synchronization, cloud storage operations, and backup management. ## Base URL ``` https://your-domain/api/v1 ``` ## Authentication All endpoints require authentication via bearer token: ``` Authorization: Bearer ``` ## Endpoints ### File Synchronization #### POST `/sync/files` Synchronizes files between two locations. **Request:** ```json { "sourceDirectory": "/path/to/source", "targetDirectory": "/path/to/target", "deleteMissingInTarget": false, "verifyIntegrity": true, "excludePatterns": ["*.tmp", "*.bak"] } ``` **Response:** ```json { "success": true, "changesApplied": 42, "conflictsEncountered": 0, "errors": [], "syncedAt": "2024-01-15T10:30:00Z", "executionTimeMs": 5432 } ``` **Status Codes:** - `200 OK` - Sync completed successfully - `400 Bad Request` - Invalid parameters - `401 Unauthorized` - Missing/invalid authentication - `500 Internal Server Error` - Server error --- ### Database Synchronization #### POST `/sync/database` Synchronizes database entities between two servers. **Request:** ```json { "sourceConnectionString": "Server=source;Database=db;", "targetConnectionString": "Server=target;Database=db;", "entityNames": ["Users", "Products", "Orders"], "useTransactions": true } ``` **Response:** ```json { "success": true, "changesApplied": 1250, "conflictsEncountered": 3, "errors": [], "syncedAt": "2024-01-15T10:30:00Z", "executionTimeMs": 12543 } ``` --- ### Cloud Storage Operations #### POST `/cloud/{provider}/upload` Uploads a file to cloud storage. **Parameters:** - `provider` - Cloud provider type (`azure`, `s3`) **Request:** ```json { "cloudPath": "/backups/file.zip", "localPath": "/local/path/file.zip", "metadata": { "backup-type": "full", "version": "1.0" } } ``` **Response:** ```json { "success": true, "message": "File uploaded successfully", "executionTimeMs": 2341 } ``` --- #### GET `/cloud/{provider}/list` Lists files in cloud storage. **Query Parameters:** - `prefix` - Filter by path prefix - `filter` - Additional filter pattern **Response:** ```json { "files": [ { "name": "backup-001.zip", "path": "backups/backup-001.zip", "size": 1024000000, "modifiedDate": "2024-01-15T10:00:00Z", "eTag": "abc123def456" } ], "totalCount": 5 } ``` --- #### POST `/cloud/{provider}/download` Downloads a file from cloud storage. **Request:** ```json { "cloudPath": "backups/file.zip", "localPath": "/local/download/file.zip" } ``` --- #### GET `/cloud/{provider}/shared-link` Generates a shared access link for a file. **Query Parameters:** - `path` - Cloud file path - `expiresIn` - Expiration in seconds (default: 3600) **Response:** ```json { "url": "https://storage.example.com/file?sig=...", "expiresAt": "2024-01-15T11:30:00Z" } ``` --- ### Backup Management #### POST `/backup/create` Creates a backup of a directory. **Request:** ```json { "sourceDirectory": "/path/to/backup", "backupPath": "/backups/location", "isFullBackup": false, "description": "Incremental backup of application data" } ``` **Response:** ```json { "versionId": "550e8400-e29b-41d4-a716-446655440000", "createdAt": "2024-01-15T10:30:00Z", "totalSize": 5368709120, "fileCount": 1542, "isFullBackup": false, "changedFiles": ["file1.txt", "file2.dat"] } ``` --- #### GET `/backup/versions` Lists all backup versions. **Query Parameters:** - `backupPath` - Path to backup location **Response:** ```json { "versions": [ { "versionId": "550e8400-e29b-41d4-a716-446655440000", "createdAt": "2024-01-15T10:30:00Z", "totalSize": 5368709120, "fileCount": 1542, "isFullBackup": false } ], "totalCount": 15 } ``` --- #### POST `/backup/restore` Restores a backup version. **Request:** ```json { "backupPath": "/backups/location", "versionId": "550e8400-e29b-41d4-a716-446655440000", "restorePath": "/restore/location" } ``` --- #### GET `/backup/restore-point-in-time` Restores to a specific point in time. **Query Parameters:** - `backupPath` - Path to backup location - `pointInTime` - ISO 8601 datetime - `restorePath` - Target restore path --- #### POST `/backup/prune` Deletes old backup versions. **Query Parameters:** - `backupPath` - Path to backup location - `retentionDays` - Number of days to retain **Response:** ```json { "deletedCount": 5 } ``` --- ### Merge Operations #### POST `/merge/files` Performs 3-way merge of files. **Request:** ```json { "baseFile": "/path/to/base.txt", "sourceFile": "/path/to/source.txt", "targetFile": "/path/to/target.txt" } ``` **Response:** ```json { "success": true, "mergedContent": "...", "conflicts": [ { "lineNumber": 42, "baseContent": "original", "sourceContent": "modified in source", "targetContent": "modified in target", "resolution": "modified in source" } ], "conflictResolutionCount": 1 } ``` --- ### Session Management #### POST `/sync/session/start` Starts a synchronization session. **Request:** ```json { "sourceLocation": "System1", "targetLocation": "System2", "syncType": "Full" } ``` **Response:** ```json { "sessionId": "session-12345", "startedAt": "2024-01-15T10:30:00Z", "sourceIdentifier": "System1", "targetIdentifier": "System2" } ``` --- #### GET `/sync/session/{sessionId}/status` Gets session status and progress. **Response:** ```json { "sessionId": "session-12345", "status": "in-progress", "progressPercentage": 65, "message": "Processing database entities", "result": null, "createdAt": "2024-01-15T10:30:00Z", "completedAt": null } ``` --- #### POST `/sync/session/{sessionId}/complete` Completes a synchronization session. --- ### Health & Monitoring #### GET `/health` Health check endpoint. **Response:** ```json { "status": "healthy", "timestamp": "2024-01-15T10:30:00Z", "details": { "database": "connected", "storage": "available", "memory": "normal" } } ``` --- #### GET `/metrics` Gets system metrics and performance statistics. **Response:** ```json { "totalSyncOperations": 1542, "successfulSyncs": 1523, "failedSyncs": 19, "averageSyncDuration": 5234, "totalDataTransferred": 1299827200, "cloudStorageUsage": { "azure": 2684354560, "s3": 1342177280 } } ``` --- ## Error Responses All error responses follow this format: ```json { "errorCode": "SYNC_FAILED", "message": "Synchronization operation failed", "details": "Source directory not found", "timestamp": "2024-01-15T10:30:00Z" } ``` ### Common Error Codes | Code | HTTP Status | Description | |------|-------------|-------------| | `INVALID_REQUEST` | 400 | Invalid request parameters | | `UNAUTHORIZED` | 401 | Missing or invalid authentication | | `FORBIDDEN` | 403 | Insufficient permissions | | `NOT_FOUND` | 404 | Resource not found | | `SYNC_FAILED` | 500 | Sync operation failed | | `DATABASE_ERROR` | 500 | Database operation error | | `CLOUD_ERROR` | 503 | Cloud storage unavailable | --- ## Rate Limiting - **Limit**: 100 requests per minute per API key - **Headers**: `X-RateLimit-Limit`, `X-RateLimit-Remaining` --- ## Webhooks (Optional) Subscribe to sync completion events: ```bash POST /webhooks/subscribe { "url": "https://your-app.com/webhook", "events": ["sync.completed", "sync.failed"] } ``` --- ## SDK Usage Examples ### C# / .NET ```csharp using HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token); var request = new { sourceDirectory = @"C:\source", targetDirectory = @"C:\target" }; var response = await client.PostAsJsonAsync( "https://api.example.com/api/v1/sync/files", request); var result = await response.Content.ReadAsAsync(); ``` ### JavaScript / Node.js ```javascript const response = await fetch('https://api.example.com/api/v1/sync/files', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ sourceDirectory: '/path/to/source', targetDirectory: '/path/to/target' }) }); const result = await response.json(); console.log(result); ```