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