Example #1
0
def UpdatePin(id=0):
    pin = Pin.query.get_or_404(id)
    user = get_jwt_identity()
    if (User.Role(user['role']) not in [User.Role.ADMIN, User.Role.VERIFIED]) and (user['id'] != pin.edits[0].user_id):
        return Response('only the creator or an admin can edit a pin', status=403)
    try:
        json = request.json
        details = ''
        PROPERTY_LIST = ['position_x', 'position_y', 'symbol', 'resource', 'rank', 'name',
                         'amount', 'respawn', 'notes', 'x_cord', 'y_cord']
        for prop in PROPERTY_LIST:
            old_value = getattr(pin, prop)
            enum = False
            if hasattr(old_value, 'value'):
                old_value = old_value.value
                enum = True
            if old_value != json[prop]:
                details += f'{prop} changed from {old_value} to {json[prop]}\n'
                if enum is True:
                    if json[prop] in [item.value for item in Pin.Symbol]:
                        setattr(pin, prop, Pin.Symbol(json[prop]))
                    elif json[prop] in [item.value for item in Pin.Resource]:
                        setattr(pin, prop, Pin.Resource(json[prop]))
                else:
                    setattr(pin, prop, json[prop])
        db.session.commit()
        newEdit = Edit(details, pin.id, get_jwt_identity()['id'])
        db.session.add(newEdit)
        db.session.commit()
        return jsonify(pin.to_dict())
    except IntegrityError as error:
        return Response(error.args[0], status=400)
Example #2
0
def CreatePin():
    json = request.json
    try:
        newPin = Pin(
            json['position_x'],
            json['position_y'],
            Pin.Symbol(json['symbol']),
            Pin.Resource(json['resource']),
            json['world_id'] or None,
            json['rank'],
            json['name'],
            json['amount'],
            json['respawn'],
            json['notes'],
            json['x_cord'],
            json['y_cord']
            )
        db.session.add(newPin)
        db.session.commit()
        newEdit = Edit(json['notes'], newPin.id, get_jwt_identity()['id'])
        db.session.add(newEdit)
        db.session.commit()
        data = jsonify(newPin.to_dict())
        data.status_code = 201
        return data
    except IntegrityError as error:
        return Response(error.args[0], status=400)