示例#1
0
    def on_join_jap(self, data: dict):
        """Call on message JOIN_JAP.

        Emit USER_JOINED_JAP in the room 'jap_event/jap_id'. and USER_JOINED_TABLE if the user has one

        Args :
            data = {user_id, jap_event_id, ?table_id}
        Emit :
            USER_JOINED_JAP = {
                "jap_event_id": int,
                "new_member": asdict(new_member),
                "members": list(User)
            }
        """
        app.logger.info("JOIN_JAP")
        app.logger.info(request.sid)

        session_id = request.sid
        user_id = data["user_id"]
        jap_event_id = data["jap_event_id"]

        self.session_id_user_id[session_id] = {
            "user_id": user_id,
            "jap_event_id": jap_event_id,
        }

        jap_event = JapEventService.get_jap_event(jap_event_id)

        table = TableService.get_user_table(user_id, jap_event_id)

        new_member = UserService.get_user(user_id)
        new_member_dict = asdict(new_member)
        room = self.__get_jap_event_room(data["jap_event_id"])

        if (room not in self.connected_by_jap_event
                or new_member_dict not in self.connected_by_jap_event[room]):
            join_room(room)
            self.__add_to_event(new_member, room)
            emit(
                socket_messages["USER_JOINED_JAP"],
                {
                    "jap_event_id": data["jap_event_id"],
                    "new_member": new_member_dict,
                    "members": self.connected_by_jap_event[room],
                },
                room=room,
            )
            if table:
                self.on_join_table({
                    "user_id": user_id,
                    "jap_event_id": jap_event_id,
                    "table_id": table.id,
                })
            else:
                # checkt that the user is not a jap creator, otherwise it must have a table.
                if jap_event.creator_id == user_id:
                    raise (Exception(
                        "Error at jap creation for jap creator, not added to a table"
                    ))
示例#2
0
def get_jap_event(jap_event_id: int) -> Response:
    """Get jap event for a given event id.

    Returns :
        {serialized jap_event}
    """
    jap_event = JapEventService.get_jap_event(jap_event_id)
    return jsonify(jap_event)
示例#3
0
def get_all_users_not_in_jap_event(jap_event_id: int):
    """Display all users that are not in the related jap event."""
    users = UserService.get_all_users()
    jap_event = JapEventService.get_jap_event(jap_event_id)
    return jsonify(
        {
            "users": [
                user
                for user in users
                if user.id not in [member.id for member in jap_event.members]
            ]
        }
    )
示例#4
0
def get_table_for_user_jap_event(jap_event_id: int, user_id: int):
    """Get table for a user that is in a Jap Event.

    Args :
        jap_event_id

    Returns :
        {
            jap_event: JapEvent,
            table: Table (contains is_emperor field, letting you know if user is emperor or not)
        }
    """
    jap_event = JapEventService.get_jap_event(jap_event_id)

    table = TableService.get_user_table(user_id, jap_event_id)
    if table is None:
        return jsonify({"table": table, "jap_event": jap_event})

    is_user_emperor = table.emperor == user_id
    table = asdict(table)
    table["is_emperor"] = is_user_emperor

    return jsonify({"table": table, "jap_event": jap_event})