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" ))
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)
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] ] } )
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})