freelancer/flowboard

Boards starter for the Dodil Boards Challenge. FastAPI + DataK3 + appid + Models + MCP.

A remix template · 0 remixes · Remix freelancer/flowboard

app/boards/application/ports.py


"""Ports describing the services required by the application layer."""

from typing import Optional, Protocol

from boards.domain.model import Board, Card


class BoardRepository(Protocol):
    """Persistence operations required by board use cases."""

    def get(self, board_id: str) -> Optional[Board]: ...

    def boards_for(self, email: str) -> list: ...

    def save_board(self, board: Board) -> None: ...

    def get_card(self, card_id: str) -> Optional[Card]: ...

    def cards_on(self, board_id: str) -> list: ...

    def save_card(self, card: Card) -> None: ...

    def log(
        self,
        board_id: str,
        card_id: Optional[str],
        actor: str,
        action: str,
    ) -> None: ...

    def activity_for(
        self,
        board_id: str,
        limit: int = 100,
    ) -> list[dict]: ...


class Assistant(Protocol):
    """AI capabilities available to application use cases."""

    def checklist(self, card_title: str) -> list: ...