phase 4-6 - with buggy contetn calendar page
This commit is contained in:
@@ -94,18 +94,243 @@ Added to Content model for scheduling:
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Publishing & Records
|
||||
|
||||
| Method | Path | Handler | Purpose |
|
||||
|--------|------|---------|---------|
|
||||
| GET | `/api/v1/publisher/records/` | `PublishingRecordViewSet.list` | List publishing records |
|
||||
| POST | `/api/v1/publisher/records/` | `PublishingRecordViewSet.create` | Create record |
|
||||
| GET | `/api/v1/publisher/deployments/` | `DeploymentViewSet.list` | List deployments |
|
||||
| POST | `/api/v1/publisher/publish/` | `PublishContentViewSet.publish` | Publish content |
|
||||
| POST | `/api/v1/publisher/publish/` | `PublishContentViewSet.publish` | Publish content immediately |
|
||||
| GET | `/api/v1/publisher/publish/status/` | `PublishContentViewSet.status` | Get publishing status |
|
||||
| GET | `/api/v1/publisher/site-definition/` | `SiteDefinitionViewSet.list` | Public site definitions |
|
||||
| **POST** | `/api/v1/content/{id}/schedule/` | Schedule content | Schedule content for future publish |
|
||||
| **POST** | `/api/v1/content/{id}/unschedule/` | Unschedule content | Remove from publishing schedule |
|
||||
| **GET** | `/api/v1/sites/{site_id}/publishing-settings/` | `PublishingSettingsViewSet` | Get site publishing settings |
|
||||
| **PUT** | `/api/v1/sites/{site_id}/publishing-settings/` | `PublishingSettingsViewSet` | Update publishing settings |
|
||||
|
||||
### Scheduling Endpoints (v1.3.2+)
|
||||
|
||||
| Method | Path | Purpose | Request Body | Response |
|
||||
|--------|------|---------|--------------|----------|
|
||||
| **POST** | `/api/v1/writer/content/{id}/schedule/` | Schedule content for future publishing | `{ "scheduled_publish_at": "2025-01-20T09:00:00Z" }` | `{ "success": true, "scheduled_publish_at": "2025-01-20T09:00:00Z" }` |
|
||||
| **POST** | `/api/v1/writer/content/{id}/reschedule/` | Reschedule existing scheduled content | `{ "scheduled_at": "2025-01-21T10:00:00Z" }` | `{ "success": true, "scheduled_publish_at": "2025-01-21T10:00:00Z" }` |
|
||||
| **POST** | `/api/v1/writer/content/{id}/unschedule/` | Cancel scheduled publishing | `{}` | `{ "success": true, "message": "Content unscheduled" }` |
|
||||
| **POST** | `/api/v1/writer/content/bulk_schedule/` | Bulk schedule with site defaults | `{ "content_ids": [1,2,3], "use_site_defaults": true, "site_id": 5 }` | `{ "success": true, "scheduled_count": 3, "schedule_preview": [...] }` |
|
||||
| **POST** | `/api/v1/writer/content/bulk_schedule_preview/` | Preview bulk schedule times | `{ "content_ids": [1,2,3], "site_id": 5 }` | `{ "schedule_preview": [...], "site_settings": {...} }` |
|
||||
|
||||
### Publishing Settings
|
||||
|
||||
| Method | Path | Purpose |
|
||||
|--------|------|---------|
|
||||
| **GET** | `/api/v1/sites/{site_id}/settings?tab=publishing` | Get site publishing settings (default schedule, stagger, limits) |
|
||||
| **PUT** | `/api/v1/sites/{site_id}/publishing-settings/` | Update publishing settings |
|
||||
|
||||
---
|
||||
|
||||
## API Usage Examples
|
||||
|
||||
### Publish Content Immediately
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
POST /api/v1/publisher/publish/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"content_id": 123,
|
||||
"destinations": ["wordpress"] # or ["shopify"], ["custom"]
|
||||
}
|
||||
```
|
||||
|
||||
**Success Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"success": true,
|
||||
"results": [
|
||||
{
|
||||
"destination": "wordpress",
|
||||
"success": true,
|
||||
"external_id": "456",
|
||||
"url": "https://mysite.com/article-title/",
|
||||
"publishing_record_id": 789,
|
||||
"platform_type": "wordpress"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Error Response:**
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": "Publishing API error: Invalid credentials"
|
||||
}
|
||||
```
|
||||
|
||||
### Schedule Content for Future Publishing
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
POST /api/v1/writer/content/123/schedule/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"scheduled_publish_at": "2025-01-20T09:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"scheduled_publish_at": "2025-01-20T09:00:00Z",
|
||||
"site_status": "scheduled"
|
||||
}
|
||||
```
|
||||
|
||||
**Notes:**
|
||||
- Content `site_status` changes from `not_published` → `scheduled`
|
||||
- Celery task `process_scheduled_publications` will publish at scheduled time
|
||||
- Runs every 5 minutes, so publishing happens within 5 min of scheduled time
|
||||
|
||||
### Reschedule Content
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
POST /api/v1/writer/content/123/reschedule/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"scheduled_at": "2025-01-21T10:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"scheduled_publish_at": "2025-01-21T10:00:00Z",
|
||||
"site_status": "scheduled"
|
||||
}
|
||||
```
|
||||
|
||||
**Use Cases:**
|
||||
- Reschedule from `site_status='scheduled'` (change time)
|
||||
- Reschedule from `site_status='failed'` (retry at new time)
|
||||
|
||||
### Unschedule Content
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
POST /api/v1/writer/content/123/unschedule/
|
||||
Content-Type: application/json
|
||||
|
||||
{}
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Content unscheduled successfully",
|
||||
"site_status": "not_published"
|
||||
}
|
||||
```
|
||||
|
||||
**Notes:**
|
||||
- Removes content from publishing queue
|
||||
- Content returns to `site_status='not_published'`
|
||||
- Can be rescheduled or published immediately later
|
||||
|
||||
### Bulk Schedule with Site Defaults
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
POST /api/v1/writer/content/bulk_schedule/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"content_ids": [123, 124, 125, 126],
|
||||
"use_site_defaults": true,
|
||||
"site_id": 45
|
||||
}
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"scheduled_count": 4,
|
||||
"schedule_preview": [
|
||||
{
|
||||
"content_id": 123,
|
||||
"scheduled_at": "2025-01-17T09:00:00Z",
|
||||
"title": "First Article"
|
||||
},
|
||||
{
|
||||
"content_id": 124,
|
||||
"scheduled_at": "2025-01-17T09:15:00Z",
|
||||
"title": "Second Article"
|
||||
},
|
||||
{
|
||||
"content_id": 125,
|
||||
"scheduled_at": "2025-01-17T09:30:00Z",
|
||||
"title": "Third Article"
|
||||
},
|
||||
{
|
||||
"content_id": 126,
|
||||
"scheduled_at": "2025-01-17T09:45:00Z",
|
||||
"title": "Fourth Article"
|
||||
}
|
||||
],
|
||||
"site_settings": {
|
||||
"base_time": "09:00 AM",
|
||||
"stagger_interval": 15,
|
||||
"timezone": "America/New_York"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Notes:**
|
||||
- Uses site's default publishing schedule from Site Settings
|
||||
- Automatically staggers publications (e.g., 15 min intervals)
|
||||
- No limit on number of items (unlike direct publish which is limited to 5)
|
||||
- All items set to `site_status='scheduled'`
|
||||
|
||||
### Bulk Schedule Preview (Before Confirming)
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
POST /api/v1/writer/content/bulk_schedule_preview/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"content_ids": [123, 124, 125],
|
||||
"site_id": 45
|
||||
}
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"schedule_preview": [
|
||||
{"content_id": 123, "scheduled_at": "2025-01-17T09:00:00Z", "title": "Article 1"},
|
||||
{"content_id": 124, "scheduled_at": "2025-01-17T09:15:00Z", "title": "Article 2"},
|
||||
{"content_id": 125, "scheduled_at": "2025-01-17T09:30:00Z", "title": "Article 3"}
|
||||
],
|
||||
"site_settings": {
|
||||
"base_time": "09:00 AM",
|
||||
"stagger_interval": 15,
|
||||
"timezone": "America/New_York",
|
||||
"publish_days": ["mon", "tue", "wed", "thu", "fri"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Use Case:**
|
||||
- Show user what times items will be scheduled before confirming
|
||||
- Allow user to adjust site settings if needed
|
||||
- User clicks "Confirm" to execute actual bulk_schedule
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user