feat: add board group models and update related interfaces
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from app.schemas.activity_events import ActivityEventRead
|
||||
from app.schemas.agents import AgentCreate, AgentRead, AgentUpdate
|
||||
from app.schemas.approvals import ApprovalCreate, ApprovalRead, ApprovalUpdate
|
||||
from app.schemas.board_group_memory import BoardGroupMemoryCreate, BoardGroupMemoryRead
|
||||
from app.schemas.board_memory import BoardMemoryCreate, BoardMemoryRead
|
||||
from app.schemas.board_onboarding import (
|
||||
BoardOnboardingAnswer,
|
||||
@@ -22,6 +23,8 @@ __all__ = [
|
||||
"ApprovalCreate",
|
||||
"ApprovalRead",
|
||||
"ApprovalUpdate",
|
||||
"BoardGroupMemoryCreate",
|
||||
"BoardGroupMemoryRead",
|
||||
"BoardMemoryCreate",
|
||||
"BoardMemoryRead",
|
||||
"BoardOnboardingAnswer",
|
||||
|
||||
21
backend/app/schemas/board_group_heartbeat.py
Normal file
21
backend/app/schemas/board_group_heartbeat.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
from uuid import UUID
|
||||
|
||||
from sqlmodel import SQLModel
|
||||
|
||||
|
||||
class BoardGroupHeartbeatApply(SQLModel):
|
||||
# Heartbeat cadence string understood by the OpenClaw gateway (e.g. "2m", "10m", "30m").
|
||||
every: str
|
||||
# Optional heartbeat target (most deployments use "none").
|
||||
target: str | None = None
|
||||
include_board_leads: bool = False
|
||||
|
||||
|
||||
class BoardGroupHeartbeatApplyResult(SQLModel):
|
||||
board_group_id: UUID
|
||||
requested: dict[str, Any]
|
||||
updated_agent_ids: list[UUID]
|
||||
failed_agent_ids: list[UUID]
|
||||
26
backend/app/schemas/board_group_memory.py
Normal file
26
backend/app/schemas/board_group_memory.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from uuid import UUID
|
||||
|
||||
from sqlmodel import SQLModel
|
||||
|
||||
from app.schemas.common import NonEmptyStr
|
||||
|
||||
|
||||
class BoardGroupMemoryCreate(SQLModel):
|
||||
# For writes, reject blank/whitespace-only content.
|
||||
content: NonEmptyStr
|
||||
tags: list[str] | None = None
|
||||
source: str | None = None
|
||||
|
||||
|
||||
class BoardGroupMemoryRead(SQLModel):
|
||||
id: UUID
|
||||
board_group_id: UUID
|
||||
# For reads, allow legacy rows that may have empty content (avoid response validation 500s).
|
||||
content: str
|
||||
tags: list[str] | None = None
|
||||
source: str | None = None
|
||||
is_chat: bool = False
|
||||
created_at: datetime
|
||||
28
backend/app/schemas/board_groups.py
Normal file
28
backend/app/schemas/board_groups.py
Normal file
@@ -0,0 +1,28 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from uuid import UUID
|
||||
|
||||
from sqlmodel import SQLModel
|
||||
|
||||
|
||||
class BoardGroupBase(SQLModel):
|
||||
name: str
|
||||
slug: str
|
||||
description: str | None = None
|
||||
|
||||
|
||||
class BoardGroupCreate(BoardGroupBase):
|
||||
pass
|
||||
|
||||
|
||||
class BoardGroupUpdate(SQLModel):
|
||||
name: str | None = None
|
||||
slug: str | None = None
|
||||
description: str | None = None
|
||||
|
||||
|
||||
class BoardGroupRead(BoardGroupBase):
|
||||
id: UUID
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
@@ -12,6 +12,7 @@ class BoardBase(SQLModel):
|
||||
name: str
|
||||
slug: str
|
||||
gateway_id: UUID | None = None
|
||||
board_group_id: UUID | None = None
|
||||
board_type: str = "goal"
|
||||
objective: str | None = None
|
||||
success_metrics: dict[str, object] | None = None
|
||||
@@ -35,6 +36,7 @@ class BoardUpdate(SQLModel):
|
||||
name: str | None = None
|
||||
slug: str | None = None
|
||||
gateway_id: UUID | None = None
|
||||
board_group_id: UUID | None = None
|
||||
board_type: str | None = None
|
||||
objective: str | None = None
|
||||
success_metrics: dict[str, object] | None = None
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from sqlmodel import SQLModel
|
||||
from datetime import datetime
|
||||
from uuid import UUID
|
||||
|
||||
from sqlmodel import Field, SQLModel
|
||||
|
||||
from app.schemas.agents import AgentRead
|
||||
from app.schemas.approvals import ApprovalRead
|
||||
from app.schemas.board_groups import BoardGroupRead
|
||||
from app.schemas.board_memory import BoardMemoryRead
|
||||
from app.schemas.boards import BoardRead
|
||||
from app.schemas.tasks import TaskRead
|
||||
@@ -22,3 +26,29 @@ class BoardSnapshot(SQLModel):
|
||||
approvals: list[ApprovalRead]
|
||||
chat_messages: list[BoardMemoryRead]
|
||||
pending_approvals_count: int = 0
|
||||
|
||||
|
||||
class BoardGroupTaskSummary(SQLModel):
|
||||
id: UUID
|
||||
board_id: UUID
|
||||
board_name: str
|
||||
title: str
|
||||
status: str
|
||||
priority: str
|
||||
assigned_agent_id: UUID | None = None
|
||||
assignee: str | None = None
|
||||
due_at: datetime | None = None
|
||||
in_progress_at: datetime | None = None
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
|
||||
class BoardGroupBoardSnapshot(SQLModel):
|
||||
board: BoardRead
|
||||
task_counts: dict[str, int] = Field(default_factory=dict)
|
||||
tasks: list[BoardGroupTaskSummary] = Field(default_factory=list)
|
||||
|
||||
|
||||
class BoardGroupSnapshot(SQLModel):
|
||||
group: BoardGroupRead | None = None
|
||||
boards: list[BoardGroupBoardSnapshot] = Field(default_factory=list)
|
||||
|
||||
Reference in New Issue
Block a user