Skip to content

Commit

Permalink
Merge pull request #87 from bomzheg/#83
Browse files Browse the repository at this point in the history
  • Loading branch information
bomzheg authored Jun 8, 2024
2 parents fdae4f2 + bf7117c commit 0bd3400
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 4 deletions.
10 changes: 10 additions & 0 deletions shvatka/core/interfaces/dal/waiver.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,13 @@ async def replace_team_waiver(self, primary: dto.Team, secondary: dto.Team):
class WaiverChecker(Protocol):
async def check_waiver(self, player: dto.Player, team: dto.Team, game: dto.Game) -> bool:
raise NotImplementedError


class WaiverGetter(Protocol):
async def get_player_waiver(
self,
game: dto.Game,
player: dto.Player,
team: dto.Team,
) -> dto.Waiver | None:
raise NotImplementedError
20 changes: 20 additions & 0 deletions shvatka/core/models/enums/played.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,23 @@ class Played(str, enum.Enum):

not_allowed = "not_allowed"
"""не допущен организаторами"""

@property
def can_play(self) -> bool:
return self.value == Played.yes

@property
def is_deny(self) -> bool:
return self.value == Played.no

@property
def cant_decide(self) -> bool:
return self.value == Played.think

@property
def is_revoked(self) -> bool:
return self.value == Played.revoked

@property
def is_not_allowed(self) -> bool:
return self.value == Played.not_allowed
10 changes: 10 additions & 0 deletions shvatka/core/services/waiver.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
WaiverVoteGetter,
WaiverApprover,
GameWaiversGetter,
WaiverGetter,
)
from shvatka.core.models import dto
from shvatka.core.models import enums
Expand Down Expand Up @@ -128,6 +129,15 @@ async def revoke_vote_by_captain(
await dao.commit()


async def get_my_waiver(
player: dto.Player,
team: dto.Team,
game: dto.Game,
dao: WaiverGetter,
) -> dto.Waiver | None:
return await dao.get_player_waiver(player=player, team=team, game=game)


def check_allow_approve_waivers(team_player: dto.FullTeamPlayer):
if not team_player.can_manage_waivers:
raise PermissionsError(
Expand Down
11 changes: 11 additions & 0 deletions shvatka/infrastructure/db/dao/rdb/waiver.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,17 @@ async def delete(self, waiver: dto.WaiverQuery):
if waiver_db := await self.get_or_none(waiver.game, waiver.player, waiver.team):
await self._delete(waiver_db)

async def get_player_waiver(
self,
game: dto.Game,
player: dto.Player,
team: dto.Team,
) -> dto.Waiver | None:
waiver_db = await self.get_or_none(game, player, team)
if not waiver_db:
return None
return waiver_db.to_dto(player=player, team=team, game=game)

async def get_or_none(
self,
game: dto.Game,
Expand Down
2 changes: 1 addition & 1 deletion shvatka/tgbot/dialogs/game_manage/dialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@
Window(
Jinja(
"Выбрана игра: <b>{{game.name}}</b> с ID {{game.id}}\n"
"Текущий статус: <b>{{game.status}}</b>\n"
"Текущий статус: <b>{{game.status | game_status}}</b>\n"
"{% if game.levels_count %}"
"Количество уровней: <b>{{game.levels_count}}</b>\n"
"{% else %}"
Expand Down
28 changes: 26 additions & 2 deletions shvatka/tgbot/dialogs/main_menu/dialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

from shvatka.tgbot import states
from .getters import get_promotion_token, get_main
from shvatka.tgbot.dialogs.team_manage.getters import get_my_team_

main_menu = Dialog(
Window(
Expand All @@ -24,6 +23,31 @@
"{% if game.start_at %}"
"Игра запланирована на {{ game.start_at|user_timezone }}"
"{% endif %}"
"\n\n"
"{% if org %}"
"{% if not org.deleted %}"
"Ты организатор. Вот твои полномочия на игру:\n"
"{{org.can_spy | bool_emoji}} шпионить\n"
"{{org.can_see_log_keys | bool_emoji}} смотреть лог ключей\n"
"{% else %}"
"Тебя удалили из организаторов. К сожалению, "
"ты не сможешь ни играть ни участвовать в организации."
"{% endif %}"
"{% elif not team %}"
"Чтобы поиграть в игру - найди себе команду, сейчас ты не состоишь ни в одной"
"{% elif waiver %}"
"{% if waiver.played.can_play %}"
"Ты <b>будешь играть</b> в эту игру"
"{% elif waiver.played.is_deny %}"
"Получен твой <b>отказ</b> играть в эту игру"
"{% elif waiver.played.cant_decide %}"
"От тебя <b>не поступило</b> итогового решения по игре"
"{% elif waiver.played.is_revoked %}"
"Твой капитан <b>исключил тебя</b> из списков на игру"
"{% elif waiver.played.is_not_allowed %}"
"Орги <b>не приняли</b> твою заявку на игру"
"{% endif %}"
"{% endif %}"
),
Start(
Const("🗄Прошедшие игры"),
Expand Down Expand Up @@ -78,7 +102,7 @@
Cancel(Const("❌Закрыть")),
# ачивки
state=states.MainMenuSG.main,
getter=(get_main, get_my_team_),
getter=get_main,
),
)

Expand Down
16 changes: 15 additions & 1 deletion shvatka/tgbot/dialogs/main_menu/getters.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

from shvatka.core.models import dto
from shvatka.core.services.organizers import get_by_player_or_none
from shvatka.core.services.player import save_promotion_invite
from shvatka.core.services.player import save_promotion_invite, get_my_team, get_full_team_player
from shvatka.core.services.waiver import get_my_waiver
from shvatka.core.utils.exceptions import PlayerNotInTeam
from shvatka.infrastructure.db.dao.holder import HolderDao
from shvatka.tgbot import keyboards as kb

Expand All @@ -12,10 +14,22 @@ async def get_main(dao: HolderDao, player: dto.Player, game: dto.Game, **_):
org = await get_by_player_or_none(player=player, game=game, dao=dao.organizer)
else:
org = None
try:
team = await get_my_team(player=player, dao=dao.team_player)
team_player = await get_full_team_player(player=player, team=team, dao=dao.team_player)
waiver = await get_my_waiver(player=player, team=team, game=game, dao=dao.waiver)
except PlayerNotInTeam:
team = None
team_player = None
waiver = None

return {
"player": player,
"game": game,
"org": org,
"team": team,
"team_player": team_player,
"waiver": waiver,
}


Expand Down

0 comments on commit 0bd3400

Please sign in to comment.