74 lines
1.3 KiB
Python
74 lines
1.3 KiB
Python
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
|