Пример #1
0
    def __check_if_room_exist(self, id):
        """
        check if room exist.
        """

        if not Room.find(id):
            raise ValidationError("The room id not found.")
Пример #2
0
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