Пример #1
0
def create():

    token = request.json.get('token')
    if token is None:
        abort(
            401,
            'Authentication token is absent! You should request token by POST {post_token_url}'
            .format(post_token_url=url_for('user.post_token')))

    requesting_user = User.verify_api_auth_token(token)

    hosted_room = Room.query.filter_by(host=requesting_user,
                                       closed=None).first()
    if hosted_room:
        return jsonify({
            'errors': [{
                'message':
                'User {username} already has opened room "{room_name}"!'.
                format(username=requesting_user.username,
                       room_name=hosted_room.room_name)
            }]
        }), 403

    connected_room = requesting_user.connected_rooms
    if connected_room.count() > 0:
        return jsonify({
            'errors': [{
                'message':
                'User {username} already is connected to other room!'.format(
                    username=requesting_user.username)
            }]
        }), 403

    room_name = request.json.get('roomName')
    new_room = Room(room_name=room_name,
                    host=requesting_user,
                    created=datetime.utcnow())
    db.session.add(new_room)
    new_room.connect(requesting_user)
    db.session.commit()

    return jsonify({
        'roomId': new_room.id,
        'roomName': new_room.room_name,
        'host': new_room.host.username,
        'created': new_room.created,
        'closed': new_room.closed,
        'connectedUsers': new_room.connected_users.count(),
        'status': 'open' if new_room.closed is None else 'closed',
        'connect': url_for('room.connect', room_id=new_room.id)
    }), 201