contest/orbit-boards

Orbit Boards, a private, remixable team task board built with FastAPI, DataK3, AppID, Models and MCP.

A remix template · 0 remixes · Remix contest/orbit-boards

app/boards/application/ports.py

"""Ports required by application use cases. Infrastructure and tests implement these contracts."""
from typing import Optional, Protocol

from boards.domain.model import Board, Card


class BoardRepository(Protocol):
    def get(self, board_id: str) -> Optional[Board]: ...
    def boards_for(self, email: str) -> list[Board]: ...
    def save_board(self, board: Board) -> None: ...
    def save_board_event(self, board: Board, event: dict) -> None: ...
    def get_card(self, card_id: str) -> Optional[Card]: ...
    def cards_on(self, board_id: str) -> list[Card]: ...
    def save_card(self, card: Card) -> None: ...
    def save_cards_and_events(self, cards: list[Card], events: list[dict]) -> None: ...
    def save_card_event(self, card: Card, event: dict) -> 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 = 50) -> list[dict]: ...
    def check_ready(self) -> None: ...


class Assistant(Protocol):
    def checklist(self, card_title: str) -> list[str]: ...