from __future__ import annotations from pydantic import BaseModel as PydanticBaseModel from hopper.models.board import GameBoard from hopper.models.player import Player, Position class BaseModel(PydanticBaseModel): class Config: orm_mode = True class PingResponse(BaseModel): message: str class BoardDto(BaseModel): width: int height: int @staticmethod def from_model(board: GameBoard) -> BoardDto: return BoardDto.from_orm(board) class PositionDto(BaseModel): x: int y: int @staticmethod def from_model(position: Position) -> PositionDto: return PositionDto.from_orm(position) class PlayerDto(BaseModel): uuid: str position: PositionDto move_count: int move_attempt_count: int @staticmethod def from_model(player: Player) -> PlayerDto: return PlayerDto.from_orm(player) class DestinationDto(BaseModel): position: PositionDto class StartGameRequestDto(BaseModel): player_name: str class GameInfoDto(BaseModel): board: BoardDto destination: DestinationDto class StartGameResponseDto(GameInfoDto): player: PlayerDto class MovePlayerResponseDto(BaseModel): player: PlayerDto class PlayerInfoResponseDto(MovePlayerResponseDto): ... class ErrorResponseDto(BaseModel): detail: str