71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
"""Task schemas for API validation."""
|
|
|
|
import uuid
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
from app.models.task import TaskStatus
|
|
|
|
|
|
class TaskCreate(BaseModel):
|
|
"""
|
|
Schema for creating a new task.
|
|
|
|
Supported task types and their expected payloads:
|
|
|
|
**FILE_WRITE** - Write content to a file
|
|
payload: {"path": "/absolute/path", "content": "file content"}
|
|
|
|
**ENV_UPDATE** - Update key/value pairs in a .env file
|
|
payload: {"path": "/path/to/.env", "updates": {"KEY": "value"}}
|
|
|
|
**DOCKER_RELOAD** - Reload a Docker Compose stack
|
|
payload: {"compose_dir": "/path/to/compose/dir"}
|
|
|
|
**COMPOSITE** - Execute a sequence of sub-tasks
|
|
payload: {"sequence": [{"task": "FILE_WRITE", "payload": {...}}, ...]}
|
|
|
|
Legacy types (still supported):
|
|
- provision_server, configure_keycloak, configure_minio, etc.
|
|
|
|
Note: Payload validation is performed agent-side. The orchestrator
|
|
accepts any dict payload to allow flexibility and forward compatibility.
|
|
"""
|
|
|
|
tenant_id: uuid.UUID
|
|
type: str = Field(
|
|
...,
|
|
min_length=1,
|
|
max_length=100,
|
|
description="Task type (FILE_WRITE, ENV_UPDATE, DOCKER_RELOAD, COMPOSITE, etc.)",
|
|
)
|
|
payload: dict[str, Any] = Field(
|
|
default_factory=dict,
|
|
description="Task-specific payload (see docstring for formats)",
|
|
)
|
|
|
|
|
|
class TaskUpdate(BaseModel):
|
|
"""Schema for updating a task (status and result only)."""
|
|
|
|
status: TaskStatus | None = None
|
|
result: dict[str, Any] | None = None
|
|
|
|
|
|
class TaskResponse(BaseModel):
|
|
"""Schema for task response."""
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: uuid.UUID
|
|
tenant_id: uuid.UUID
|
|
agent_id: uuid.UUID | None
|
|
type: str
|
|
payload: dict[str, Any]
|
|
status: str
|
|
result: dict[str, Any] | None
|
|
created_at: datetime
|
|
updated_at: datetime
|