Skip to content

Milestones & Tasks

Create Milestone

Endpoint: POST /milestones/

Description: Create a new milestone for Mother or Child.

Request Body:

{
    "name": "First Steps",
    "description": "Baby's first steps!",
    "category": "Development",
    "child_id": "child_uuid",
    "finish_date": "2025-12-25T10:00:00Z"
}

Response: 201 Created

{
    "id": "milestone_uuid",
    "owner_id": "user_uuid",
    "owner_type": "child",
    "name": "First Steps",
    "description": "Baby's first steps!",
    "status": "pending",
    "category": "Development",
    "finish_date": "2025-12-25T10:00:00Z",
    "created_at": "2025-11-27T10:00:00Z",
    "updated_at": "2025-11-27T10:00:00Z"
}

Toggle Milestone Status

Endpoint: PATCH /milestones/{milestone_id}/status

Description: Toggle milestone status between 'pending' and 'completed'.

Request Body:

{
    "completed": true,
    "child_id": "child_uuid"
}

Response: 201 Created

{
    "id": "milestone_uuid",
    "owner_id": "user_uuid",
    "owner_type": "child",
    "name": "First Steps",
    "description": "Baby's first steps!",
    "status": "completed",
    "category": "Development",
    "finish_date": "2025-12-25T10:00:00Z",
    "created_at": "2025-11-27T10:00:00Z",
    "updated_at": "2025-11-27T10:00:00Z"
}

Update Milestone

Endpoint: PUT /milestones/{milestone_id}

Description: Update milestone details (name, description, category).

Request Body:

{
    "name": "Baby's First Steps"
}

Response: 200 OK

{
    "id": "milestone_uuid",
    "owner_id": "user_uuid",
    "owner_type": "child",
    "name": "Baby's First Steps",
    "description": "Baby's first steps!",
    "status": "completed",
    "category": "Development",
    "finish_date": "2025-12-25T10:00:00Z",
    "created_at": "2025-11-27T10:00:00Z",
    "updated_at": "2025-11-27T10:00:00Z"
}

Delete Milestone

Endpoint: DELETE /milestones/{milestone_id}

Description: Permanently delete a milestone.

Response: 200 OK

Get Pending Milestones

Endpoint: GET /milestones/pending

Description: Get all pending milestones for Mother or Child.

Query Parameters: - child_id (UUID): Filter by child ID

Response: 200 OK

{
    "details": [
        {
            "id": "milestone_uuid",
            "owner_id": "user_uuid",
            "owner_type": "child",
            "name": "First Steps",
            "description": "Baby's first steps!",
            "status": "pending",
            "category": "Development",
            "finish_date": "2025-12-25T10:00:00Z",
            "created_at": "2025-11-27T10:00:00Z",
            "updated_at": "2025-11-27T10:00:00Z"
        }
    ]
}

Get All Milestones

Endpoint: GET /milestones/

Description: Get all milestones with optional filters.

Query Parameters: - child_id (UUID): Filter by child ID - category (string): Filter by category

Response: 200 OK

{
    "details": [
        {
            "id": "milestone_uuid",
            "owner_id": "user_uuid",
            "owner_type": "child",
            "name": "First Steps",
            "description": "Baby's first steps!",
            "status": "pending",
            "category": "Development",
            "finish_date": "2025-12-25T10:00:00Z",
            "created_at": "2025-11-27T10:00:00Z",
            "updated_at": "2025-11-27T10:00:00Z"
        }
    ]
}

Get Milestone Progress

Endpoint: GET /milestones/progress

Description: Get overall milestone progress statistics.

Query Parameters: - child_id (UUID): Filter by child ID

Response: 200 OK

{
    "completed_count": 5,
    "pending_count": 10,
    "total_count": 15,
    "percentage_complete": 33.33
}

Get Milestone Summary

Endpoint: GET /milestones/summary

Description: Get milestone summary for a specific time period.

Query Parameters: - child_id (UUID): Filter by child ID - duration (string): Time period for summary (day, week, month, year)

Response: 200 OK

{
    "completed_milestones": {
        "count": 1,
        "milestones": [
            {
                "id": "milestone_uuid",
                "name": "First Steps",
                "description": "Baby's first steps!",
                "category": "Development"
            }
        ]
    },
    "created_milestones": {
        "count": 1,
        "milestones": [
            {
                "id": "milestone_uuid_2",
                "name": "First Words",
                "description": "Baby's first words!",
                "category": "Development",
                "status": "pending"
            }
        ]
    }
}

Get Available Categories

Endpoint: GET /milestones/categories

Description: Get available milestone categories based on owner type.

Query Parameters: - child_id (UUID): If provided, returns child categories; otherwise returns mother categories

Response: 200 OK

{
    "categories": [
        {
            "value": "Development",
            "label": "Development"
        },
        {
            "value": "Health and Nutrition",
            "label": "Health and Nutrition"
        }
    ]
}

Create Task

Endpoint: POST /tasks/

Description: Create a new task.

Request Body:

{
    "name": "Buy Diapers",
    "description": "Buy diapers from the store.",
    "due_date": "2025-11-28T10:00:00Z",
    "reminder_enabled": true,
    "reminder_time": "2025-11-28T09:00:00Z"
}

Response: 201 Created

{
    "id": "task_uuid",
    "name": "Buy Diapers",
    "description": "Buy diapers from the store.",
    "due_date": "2025-11-28T10:00:00Z",
    "status": "pending",
    "completed_at": null,
    "reminder_enabled": true,
    "reminder_time": "2025-11-28T09:00:00Z",
    "notification_sent": false,
    "created_at": "2025-11-27T10:00:00Z",
    "updated_at": "2025-11-27T10:00:00Z"
}

Delete Task

Endpoint: DELETE /tasks/{task_id}

Description: Delete a task.

Response: 200 OK

Edit Task

Endpoint: PATCH /tasks/{task_id}

Description: Edit an existing task.

Request Body:

{
    "name": "Buy More Diapers"
}

Response: 200 OK

{
    "id": "task_uuid",
    "name": "Buy More Diapers",
    "description": "Buy diapers from the store.",
    "due_date": "2025-11-28T10:00:00Z",
    "status": "pending",
    "completed_at": null,
    "reminder_enabled": true,
    "reminder_time": "2025-11-28T09:00:00Z",
    "notification_sent": false,
    "created_at": "2025-11-27T10:00:00Z",
    "updated_at": "2025-11-27T10:00:00Z"
}

List Tasks

Endpoint: GET /tasks/

Description: Get paginated list of tasks for the current user with optional status filter and ordering.

Query Parameters: - page (integer): Page number - per_page (integer): Items per page - task_status (string): Filter by status - order_by (string): Field to order by - order_direction (string): Order direction (asc or desc)

Response: 200 OK

{
    "details": [
        {
            "id": "task_uuid",
            "name": "Buy Diapers",
            "description": "Buy diapers from the store.",
            "due_date": "2025-11-28T10:00:00Z",
            "status": "pending",
            "completed_at": null,
            "created_at": "2025-11-27T10:00:00Z",
            "updated_at": "2025-11-27T10:00:00Z"
        }
    ],
    "pagination": {
        "page": 1,
        "per_page": 10,
        "total_count": 1,
        "total_pages": 1,
        "next": null,
        "prev": null
    }
}

Toggle Task Completion

Endpoint: PATCH /tasks/{task_id}/status

Description: Toggles the completion status of a task.

Request Body:

{
    "completed": true
}

Response: 200 OK

{
    "id": "task_uuid",
    "name": "Buy Diapers",
    "description": "Buy diapers from the store.",
    "due_date": "2025-11-28T10:00:00Z",
    "status": "completed",
    "completed_at": "2025-11-27T10:00:00Z",
    "reminder_enabled": true,
    "reminder_time": "2025-11-28T09:00:00Z",
    "notification_sent": false,
    "created_at": "2025-11-27T10:00:00Z",
    "updated_at": "2025-11-27T10:00:00Z"
}