def __check_if_room_exist(self, id): """ check if room exist. """ if not Room.find(id): raise ValidationError("The room id not found.")
def send_message(): data = request.get_json() if (not data['room_id'] and not data['to_id']) or data['to_id'] == g.user['id']: return jsonify({'message': "Bad Request"}), 400 if data['room_id']: room_id = data['room_id'] room = Room.find(room_id) room_member = RoomMember.where('room_id', room_id).where('user_id', g.user['id']).first() if not room or not room_member: return jsonify({'message': "Unknown Room"}), 400 else: user = User.find(data['to_id']) if not user: return jsonify({'message': "Unknown User"}), 400 room = Room.where('is_group', 0) \ .select('rooms.id') \ .join('room_members as rm', 'rm.room_id', '=', 'rooms.id') \ .where('rm.user_id', g.user['id']) \ .where_has( 'members', lambda q: q.where('user_id', data['to_id']).where_raw('room_id = rooms.id') ) \ .distinct() \ .first() if not room: room = Room() room.save() member1 = RoomMember() member1.room_id = room.id member1.user_id = data['to_id'] member1.save() member2 = RoomMember() member2.room_id = room.id member2.user_id = g.user['id'] member2.save() #connect exist socket to room clients = _.where(connected_users,{'id':data['to_id']}) my_clients = _.where(connected_users,{'id':g.user['id']}) clients = _.compact(_.union(clients, my_clients)) for item in clients: join_room('room-%s' % room.id, sid=item['sid'], namespace='/') room_id = room.id message = Message() message.sender_id = g.user['id'] message.room_id = room_id message.message = data['message'] if data['message'] else '...' message.save() RoomMember.where('room_id', room_id).where('user_id', g.user['id']).update(last_read_message=message.id) message_response = message.serialize() message_response['first_name'] = g.user['first_name'] message_response['last_name'] = g.user['last_name'] message_response['avatar'] = g.user['avatar'] return jsonify(message_response), 200