Responses

Response

Bases: Model

Base model for game state updates broadcasted to the frontend.

Frontend Response Payload Example:

{
  "type": "Response",
  "money": {"1": 1500, "2": 1200},
  "active_phase_player": 2,
  "active_turn_player": 2,
  "phase": "management"
}
Source code in magnate/models.py
class Response(models.Model):
    """
    Base model for game state updates broadcasted to the frontend.

    Frontend Response Payload Example:
    ```json
    {
      "type": "Response",
      "money": {"1": 1500, "2": 1200},
      "active_phase_player": 2,
      "active_turn_player": 2,
      "phase": "management"
    }
    ```
    """
    money = models.JSONField(default=dict, blank=True)
    active_phase_player = models.ForeignKey('CustomUser', on_delete=models.SET_NULL, null=True, related_name='response_phase_to_play')
    active_turn_player = models.ForeignKey('CustomUser', on_delete=models.SET_NULL, null=True, related_name='response_turns_to_play')
    phase = models.CharField(choices=Game.GamePhase, max_length=20)
    positions = models.JSONField(default=dict, blank=True)

ResponseMovement

Bases: Response

Base response for an event that moves a player across the board.

Frontend Response Payload Example:

{
  "type": "ResponseMovement",
  "money": {"1": 1500, "2": 1200},
  "active_phase_player": 2,
  "active_turn_player": 2,
  "phase": "moving",
  "path": [10, 11, 12, 13, 14, 15],
  "fantasy_event": null
}
Source code in magnate/models.py
class ResponseMovement(Response):
    """
    Base response for an event that moves a player across the board.

    Frontend Response Payload Example:
    ```json
    {
      "type": "ResponseMovement",
      "money": {"1": 1500, "2": 1200},
      "active_phase_player": 2,
      "active_turn_player": 2,
      "phase": "moving",
      "path": [10, 11, 12, 13, 14, 15],
      "fantasy_event": null
    }
    ```
    """
    path = models.JSONField(default=list, blank=True)
    fantasy_event = models.ForeignKey('FantasyEvent', on_delete=models.CASCADE, null=True, blank=True)

ResponseThrowDices

Bases: ResponseMovement

Response detailing the result of a dice roll and valid movement destinations.

Frontend Response Payload Example:

{
  "type": "ResponseThrowDices",
  "money": {"1": 1500, "2": 1200},
  "active_phase_player": 2,
  "active_turn_player": 2,
  "phase": "moving",
  "path": [10, 11, 12],
  "fantasy_event": null,
  "dice1": 4,
  "dice2": 3,
  "dice_bus": 1,
  "destinations": [17],
  "triple": false,
  "streak": 0
}
Source code in magnate/models.py
class ResponseThrowDices(ResponseMovement):
    """
    Response detailing the result of a dice roll and valid movement destinations.

    Frontend Response Payload Example:
    ```json
    {
      "type": "ResponseThrowDices",
      "money": {"1": 1500, "2": 1200},
      "active_phase_player": 2,
      "active_turn_player": 2,
      "phase": "moving",
      "path": [10, 11, 12],
      "fantasy_event": null,
      "dice1": 4,
      "dice2": 3,
      "dice_bus": 1,
      "destinations": [17],
      "triple": false,
      "streak": 0
    }
    ```
    """
    dice1 = models.PositiveIntegerField(default=0)
    dice2 = models.PositiveIntegerField(default=0)
    dice_bus = models.PositiveIntegerField(default=0)
    destinations = models.JSONField(default=list, blank=True)
    triple = models.BooleanField(default=False)
    streak = models.IntegerField(default=0)

ResponseChooseSquare

Bases: ResponseMovement

Response confirming a player's movement to a specifically chosen square.

Frontend Response Payload Example:

{
  "type": "ResponseChooseSquare",
  "money": {"1": 1500, "2": 1200},
  "active_phase_player": 2,
  "active_turn_player": 2,
  "phase": "moving",
  "path": [10, 25],
  "fantasy_event": null
}
Source code in magnate/models.py
class ResponseChooseSquare(ResponseMovement):
    """
    Response confirming a player's movement to a specifically chosen square.

    Frontend Response Payload Example:
    ```json
    {
      "type": "ResponseChooseSquare",
      "money": {"1": 1500, "2": 1200},
      "active_phase_player": 2,
      "active_turn_player": 2,
      "phase": "moving",
      "path": [10, 25],
      "fantasy_event": null
    }
    ```
    """
    pass

ResponseChooseFantasy

Bases: Response

Response delivering the result of a drawn Chance/Community Chest card.

Frontend Response Payload Example:

{
  "type": "ResponseChooseFantasy",
  "money": {"1": 1600, "2": 1200},
  "active_phase_player": 2,
  "active_turn_player": 2,
  "phase": "management",
  "fantasy_event": 5
}
Source code in magnate/models.py
class ResponseChooseFantasy(Response):
    """
    Response delivering the result of a drawn Chance/Community Chest card.

    Frontend Response Payload Example:
    ```json
    {
      "type": "ResponseChooseFantasy",
      "money": {"1": 1600, "2": 1200},
      "active_phase_player": 2,
      "active_turn_player": 2,
      "phase": "management",
      "fantasy_event": 5
    }
    ```
    """
    fantasy_event = models.ForeignKey('FantasyEvent', on_delete=models.CASCADE, null=True, blank=True)

ResponseAuction

Bases: Response

Response updating the state of an ongoing or completed auction. Note: The @property decorators will likely be serialized as regular fields.

Frontend Response Payload Example:

{
  "type": "ResponseAuction",
  "money": {"1": 1150, "2": 1200},
  "active_phase_player": 1,
  "active_turn_player": 2,
  "phase": "management",
  "auction": 12,
  "winner": 1,
  "final_amount": 350,
  "is_tie": false
}
Source code in magnate/models.py
class ResponseAuction(Response):
    """
    Response updating the state of an ongoing or completed auction.
    Note: The @property decorators will likely be serialized as regular fields.

    Frontend Response Payload Example:
    ```json
    {
      "type": "ResponseAuction",
      "money": {"1": 1150, "2": 1200},
      "active_phase_player": 1,
      "active_turn_player": 2,
      "phase": "management",
      "auction": 12,
      "winner": 1,
      "final_amount": 350,
      "is_tie": false
    }
    ```
    """
    auction = models.OneToOneField('Auction', on_delete=models.CASCADE, related_name='response')

    @property
    def winner(self):
        return self.auction.winner

    @property
    def final_amount(self):
        return self.auction.final_amount

    @property
    def is_tie(self):
        return self.auction.is_tie