def delete_fine(
        self,
        payload: dict,
    ) -> None:
        if not payload['banker']:
            raise AuthorizationError(error_code='player_unauthorized')

        fine = Fine.get_fine_by_uuid(uuid=payload['fine_uuid'])

        if not fine:
            raise EntityNotFound(error_code='fine_not_found')

        Player.delete_player_fines_by_uuid(fine_uuid=fine.uuid)
        Fine.delete_fine(fine=fine)
Example #2
0
def test_players_from_single_team(n=10):
    fake = Faker(locale="fr_FR")
    fake.seed(42)

    team = test_team()
    database.db.session.add(team)
    database.db.session.commit()

    fine = test_fine(team_uuid=team.uuid)
    database.db.session.add(fine)
    database.db.session.commit()

    association = PlayerFines(player_fines_id=str(uuid.uuid4()))
    association.fine = fine

    players = []
    for i in range(n):
        player = Player(
            uuid=str(uuid.uuid4()),
            first_name=fake.first_name(),
            last_name=fake.last_name(),
            email=fake.email(),
            password=Passwords.hash_password(fake.password()),
            banker=False,
            team_uuid=team.uuid,
        )
        player.fines.append(association)
        players.append(player)

    return players
    def delete_player_fines(
        self,
        banker: bool,
        player_uuid: uuid,
    ) -> bool:
        if not banker:
            raise AuthorizationError(error_code='player_unauthorized')

        player = Player.get_player_by_uuid(player_uuid=player_uuid)

        if not player:
            raise EntityNotFound(error_code='player_not_found')

        Player.delete_player_fines(player_uuid)

        return True
    def update_player_fine(
        self,
        payload: dict,
    ) -> dict:
        if not payload['banker']:
            raise AuthorizationError(error_code='player_unauthorized')

        player = Player.get_player_by_uuid(player_uuid=payload['player_uuid'])

        if not player:
            raise EntityNotFound(error_code='player_not_found')

        if not payload['fine_uuid']:
            raise ModelCreationError(error_code='missing_parameter')

        fine = Fine.get_fine_by_uuid(uuid=payload['fine_uuid'])

        if not fine:
            raise EntityNotFound(error_code='fine_not_found')

        player_fine = PlayerFines(player_fines_id=str(uuid.uuid4()))
        player_fine.fine = fine
        player.fines.append(player_fine)
        db.session.commit()

        return player.to_dict()
    def signup_player(
        self,
        player_info,
    ):
        player_uuid = str(uuid.uuid4())

        password = player_info.get('password', None)
        first_name = player_info.get('first_name', None)
        last_name = player_info.get('last_name', None)
        email = player_info.get('email', None)
        add_team = player_info.get('add_team', None)
        team_uuid = player_info.get('get_team', None)

        if ((password is None or not password)
                or (first_name is None or not first_name)
                or (last_name is None or not last_name)
                or (email is None or not email)
                or ((add_team is None) and (team_uuid is None))):
            raise ModelCreationError(error_code='missing_parameter')

        if ((add_team is not None and not add_team)
                or (team_uuid is not None and not is_uuid(team_uuid))):
            raise ModelCreationError(error_code='invalid_parameter')

        if not Passwords.is_password_valid(password):
            raise ModelCreationError(error_code='invalid_password')

        if 'add_team' in player_info:
            banker = True
            team_uuid = TeamModelRepository.create_team(
                self,
                team_name=add_team,
            )
        else:
            team = Team.get_team_by_uuid(
                self,
                team_uuid=team_uuid,
            )
            if not team:
                raise EntityNotFound(error_code='team_not_found')
            banker = False

        player = Player(
            uuid=player_uuid,
            first_name=first_name,
            last_name=last_name,
            email=email,
            password=Passwords.hash_password(password),
            banker=banker,
            team_uuid=team_uuid,
        )

        db.session.add(player)
        db.session.commit()

        return {"player_uuid": player_uuid, "team_uuid": team_uuid}
    def get_player_fines(
        self,
        player_uuid: uuid,
    ) -> collections:
        result = []

        player = Player.get_player_by_uuid(player_uuid=player_uuid)

        if not player:
            raise EntityNotFound(error_code='player_not_found')

        player_fines = Player.get_player_fines_by_uuid(player_uuid=player_uuid)

        for player_fine in player_fines:
            result.append(player_fine.fine.label, )
        # return the count of each fines a player has
        # ex: {'toto':2, 'titi':1}
        final_result = collections.Counter(result)
        return final_result
Example #7
0
def data_player(team_uuid: uuid) -> Player:
    player = Player(
        uuid=str(uuid.uuid4()),
        first_name='Example',
        last_name='Player',
        email='*****@*****.**',
        password=Passwords.hash_password(TEST_PASSWORD),
        banker=False,
        team_uuid=team_uuid,
    )
    return player
Example #8
0
def test_player():
    team_uuid = str(uuid.uuid4())
    team = Team(uuid=team_uuid, label='sdv')
    database.db.session.add(team)
    player = Player(
        uuid=str(uuid.uuid4()),
        first_name='Example',
        last_name='Player',
        email='*****@*****.**',
        password=Passwords.hash_password(TEST_PASSWORD),
        banker=False,
        team_uuid=team_uuid,
    )
    return player
    def send_fines_to_players_email(
        self,
        banker: bool,
        team_uuid: uuid,
    ) -> None:
        if not banker:
            raise AuthorizationError(error_code='player_unauthorized')

        team = Team.get_team_by_uuid(team_uuid=team_uuid)

        if not team:
            raise EntityNotFound(error_code='team_not_found')

        players = Player.get_players_by_team(team_uuid=team_uuid)

        for player in players:
            fine_cost = Player.get_player_fine_cost(player_uuid=player.uuid)
            mail.send_email(
                from_email='*****@*****.**',
                to_email=player.email,
                subject='Caisse noire payment',
                text='You have to pay {} € this month'.format(fine_cost),
            )
    def signin_player(
        self,
        player_info,
    ):
        password = player_info.get('password', None)
        email = player_info.get('email', None)

        if ((password is None or not password)
                or (email is None or not email)):
            raise ModelCreationError(error_code='missing_parameter')

        player = Player.get_player_by_email(player_email=email)

        if not player:
            raise EntityNotFound(error_code='player_not_found')

        token = Passwords.generate_token(player, password)

        return jsonify({
            'token': token.decode('UTF-8'),
            'banker': player.banker,
        })
    def get_all_players_from_team(
        self,
        team_uuid,
        additional_filters,
    ):
        total_players = Player.get_total_players_by_team(team_uuid)
        if not total_players:
            raise EntityNotFound(error_code='team_not_found')
        players = Player.get_all_players_by_team(team_uuid)

        if (additional_filters.get('lastUuid')
                and additional_filters.get('lastUuid') != ''):
            from_last_uuid = Player.get_player_by_uuid(
                player_uuid=additional_filters.get('lastUuid'))
            if not from_last_uuid:
                raise EntityNotFound(error_code='player_not_found')

        # FILTER BY FIRST NAME OR LAST NAME
        if (additional_filters.get('filter')
                and additional_filters.get('filter') != ''):
            players = Player.get_player_by_name(
                players=players, filter=additional_filters.get('filter'))
            return {
                'players': players,
                'total_rows': total_players,
            }

        # FIRST PAGE
        if int(additional_filters.get('currentPage')) == 1:
            players = Player.get_players_by_limit_per_page(
                players=players, limit=int(additional_filters.get('perPage')))
        else:
            players = Player.get_players_by_lastuuid(
                players=players,
                from_last_uuid=from_last_uuid,
                limit=int(additional_filters.get('perPage')))
        return {
            'players': players,
            'total_rows': total_players,
        }