fixxed color selector in the category settings and fixxed drag and drop
Build APK / build (push) Canceled after 2m0s
Build APK / build (push) Canceled after 2m0s
subtask
This commit is contained in:
+55
@@ -57,6 +57,7 @@ GET /sync
|
||||
{
|
||||
"id": "sub_1",
|
||||
"taskId": "task_1",
|
||||
"parentSubtaskId": null,
|
||||
"title": "Setup Expo project",
|
||||
"completed": true,
|
||||
"order": 0,
|
||||
@@ -64,10 +65,21 @@ GET /sync
|
||||
"updatedAt": 1699000000000
|
||||
}
|
||||
],
|
||||
"repeatProfiles": [],
|
||||
"friendships": [],
|
||||
"deleted": [
|
||||
{
|
||||
"entity": "tasks",
|
||||
"id": "task_5",
|
||||
"updatedAt": 1699150000000
|
||||
}
|
||||
],
|
||||
"timestamp": 1699150000000
|
||||
}
|
||||
```
|
||||
|
||||
`deleted` contains every row tombstoned (deleted) since `since` — one entry per entity type/id. Clients must remove the row locally (and any related rows: a task deletion implies its subtasks, a category deletion implies its tasks and their subtasks, a parent subtask deletion implies its children).
|
||||
|
||||
**Error Responses**
|
||||
| Status | Code | Message |
|
||||
|--------|------|---------|
|
||||
@@ -114,6 +126,7 @@ POST /sync/push
|
||||
{
|
||||
"id": "sub_new",
|
||||
"taskId": "task_new",
|
||||
"parentSubtaskId": null,
|
||||
"title": "Subtask 1",
|
||||
"completed": false,
|
||||
"order": 0,
|
||||
@@ -122,10 +135,19 @@ POST /sync/push
|
||||
}
|
||||
]
|
||||
},
|
||||
"deleted": [
|
||||
{
|
||||
"entity": "categories",
|
||||
"id": "cat_gone",
|
||||
"updatedAt": 1699150000000
|
||||
}
|
||||
],
|
||||
"lastPulledAt": 1699100000000
|
||||
}
|
||||
```
|
||||
|
||||
`deleted` is a list of tombstones the client recorded locally since its last successful sync. Deletions are resolved by last-writer-wins: if the server row's `updatedAt` is newer than the tombstone's `updatedAt`, the deletion is rejected and reported as a `server_wins` conflict (with the server row as `serverVersion`) so the client re-pulls it. Accepted deletions remove the rows server-side; cascaded rows (subtasks of a deleted task, tasks/subtasks of a deleted category, children of a deleted parent subtask) are tombstoned automatically so every device removes them.
|
||||
|
||||
**Response** (200 OK)
|
||||
```json
|
||||
{
|
||||
@@ -568,6 +590,16 @@ interface Task {
|
||||
completed: boolean;
|
||||
dueDate: number; // Unix timestamp (ms), 0 if not set
|
||||
dueTime: string; // HH:MM format, empty if not set
|
||||
endTime: string; // HH:MM format, empty if not set
|
||||
allDay: boolean;
|
||||
repeat: 'none' | 'daily' | 'weekly' | 'monthly' | 'custom';
|
||||
repeatInterval: number;
|
||||
repeatDays: string; // comma separated weekday numbers, e.g. "0,2,4"
|
||||
seriesId: string; // repeating-series id, empty if not part of a series
|
||||
reminder: 'none' | 'at_time' | '15' | '30' | '60' | '120' | '1440';
|
||||
reminders: string; // comma separated reminder values, empty if none
|
||||
assigneeId: string | null;
|
||||
completedAt: number | null; // Unix timestamp (ms) when completed
|
||||
createdAt: number;
|
||||
updatedAt: number;
|
||||
subtasks?: Subtask[];
|
||||
@@ -579,14 +611,37 @@ interface Task {
|
||||
interface Subtask {
|
||||
id: string;
|
||||
taskId: string;
|
||||
parentSubtaskId: string | null; // id of the parent subtask, null for top-level
|
||||
title: string;
|
||||
description: string;
|
||||
priority: 'none' | 'low' | 'medium' | 'high' | 'critical';
|
||||
completed: boolean;
|
||||
dueDate: number;
|
||||
dueTime: string;
|
||||
endTime: string;
|
||||
allDay: boolean;
|
||||
repeat: 'none' | 'daily' | 'weekly' | 'monthly' | 'custom';
|
||||
repeatInterval: number;
|
||||
repeatDays: string;
|
||||
seriesId: string;
|
||||
reminder: 'none' | 'at_time' | '15' | '30' | '60' | '120' | '1440';
|
||||
reminders: string;
|
||||
assigneeId: string | null;
|
||||
order: number;
|
||||
createdAt: number;
|
||||
updatedAt: number;
|
||||
}
|
||||
```
|
||||
|
||||
### Tombstone
|
||||
```typescript
|
||||
interface Tombstone {
|
||||
entity: 'categories' | 'tasks' | 'subtasks' | 'repeatProfiles' | 'friendships';
|
||||
id: string; // id of the deleted row
|
||||
updatedAt: number; // Unix timestamp (ms) of the deletion
|
||||
}
|
||||
```
|
||||
|
||||
### UserSettings
|
||||
```typescript
|
||||
interface UserSettings {
|
||||
|
||||
Reference in New Issue
Block a user