Beispiel #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"
                    ))
Beispiel #2
0
def get_all_jap_events() -> Response:
    """Get all jap events.

    Returns :
        list of serialized jap_event
    """
    jap_events = JapEventService.get_all_jap_events()
    return jsonify(jap_events)
Beispiel #3
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)
Beispiel #4
0
def get_upcoming_jap_events_for_user(user_id: int) -> Response:
    """Get all upcoming jap_events for a given user.

    Args :
        user_id: int

    Returns :
        list of serialized jap_events
    """
    jap_events = JapEventService.get_upcoming_jap_events_for_user(user_id)
    return jsonify(jap_events)
Beispiel #5
0
def get_past_jap_events_for_user(user_id: int):
    """Get past jap events for a user.

    Args :
        user_id

    Returns :
        jap_events: list
    """
    jap_events = JapEventService.get_past_jap_events_for_user(user_id)
    return jsonify(jap_events)
Beispiel #6
0
def get_tables_jap_event(jap_event_id: int) -> Response:
    """Get tables for a jap event.

    Args :
        jap_event_id

    Returns :
        list of serialized tables
    """
    tables = JapEventService.get_tables_for_a_jap(jap_event_id)
    return jsonify(tables)
Beispiel #7
0
def update_status(jap_event_id: int, status: int) -> Response:
    """Update status of a jap event.

    Args :
        jap_event_id, status

    Returns :
        serialized jap_event
    """
    jap_event = JapEventService.update_status(jap_event_id, status)
    return jsonify(jap_event)
Beispiel #8
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]
            ]
        }
    )
Beispiel #9
0
def add_members(jap_event_id: int) -> Response:
    """Add members to a jap event.

    Args :
        jap_event_id, data = {members: [ user_id, user_id2 ] }

    Returns :
        { members: [User] }
    """
    data = request.json
    members = JapEventService.add_members_to_jap_event(
        jap_event_id, list(set(data["members"])))
    return jsonify(members)
    def setup_class(cls):
        """Create the client and set up a test environment."""
        cls.client = socketio.test_client(app)

        # Check and create a user named jap_creator
        cls.jap_creator = UserService.get_user_by_name("jap_creator")
        if cls.jap_creator is None:
            cls.jap_creator = UserService.create_user(
                "jap_creator", "*****@*****.**", "0678031234", ""
            )
        cls.jap_creator_id = cls.jap_creator.id

        # Check and create a user named TestUser
        cls.user = UserService.get_user_by_name("TestUser")
        if cls.user is None:
            cls.user = UserService.create_user(
                "TestUser", "*****@*****.**", "0678031234", ""
            )
        cls.user_id = cls.user.id

        # Create an icon to be sure there is one
        cls.icon = JapPlaceService.create_icon("")

        # Create an item to be sure there is one
        JapPlaceService.create_item("sushi", 300, cls.icon.id)
        cls.items = Item.query.all()
        cls.dict_item = asdict(cls.items[0])

        # Create a menu to be sure there is one
        cls.menu = JapPlaceService.create_menu(cls.items)

        # Check and Create a jap_place named Oki to be sure there is one
        cls.jap_place = JapPlaceService.get_jap_place_by_name("Oki")
        if cls.jap_place is None:
            cls.jap_place = JapPlaceService.create_jap_place(
                "testJapPlace", "1 rue", "0678031234", "12h", cls.menu.id
            )
        cls.jap_place_id = cls.jap_place.id

        # Create a jap_event named "Jap de promo" to be sure there is one
        date = datetime.datetime.now() + datetime.timedelta(days=10)
        cls.jap_event = JapEventService.create_jap_event(
            "Jap de promo", "blabla", cls.jap_place.id, cls.jap_creator.id, date
        )
        cls.jap_event_id = cls.jap_event.id

        # Save jap_event default table id
        cls.default_table_id = cls.jap_event.tables[0].id
Beispiel #11
0
def create_jap_event() -> Response:
    """Create a new jap_event.

    Body args :
        {event_name, description, jap_place_id, creator_id, date}

    Returns :
        {serialized jap_event}
    """
    data = request.json
    if not data["event_name"]:
        return json_abort(400, f"Empty string not allowed as a event_name")
    jap_event = JapEventService.create_jap_event(
        data["event_name"],
        data["description"],
        data["jap_place_id"],
        data["creator_id"],
        data["date"],
    )

    return jsonify(jap_event)
Beispiel #12
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})