Exemple #1
0
def edit_user_address():
    user_id = session["id"]
    data = request.get_json()

    if request.method == "POST":
        lon = data["lon"]
        lat = data["lat"]
        user = User.query.filter_by(id=user_id).first()
        if user is None:
            return {}, 404
        address = user.addresses.filter_by(
            lon=lon, lat=lat).first()
        if address:
            return {"error": "Address already exists"}, 409
        address = Address(user_id=user_id,
                          primary_address=False,
                          state=data["state"],
                          city=data["city"],
                          country=data["country"],
                          lat=lat,
                          lon=lon,
                          address=data["address"],
                          zip_code=data["zip_code"] if data["zip_code"] else None)
        db.session.add(address)
        db.session.commit()
        address_id = address.id
        return {
            "msg": "Address has been added",
            "address_id": address_id
        }, 201

    if request.method == "DELETE":
        address_id = data["address_id"]
        address = Address.query.filter_by(id=address_id).first()
        if user_id != address.user_id:
            return {}, 403
        n_products = address.products.count()
        if n_products > 0:
            return {"error": f"You can not delete this address. You have {n_products} product{'s' if n_products > 1 else ''} connected to it."}, 404
        db.session.delete(address)
        db.session.commit()
        return {"msg": "Address has been deleted"}, 200

    if request.method == "PATCH":
        address_id = data["address_id"]
        address = Address.query.filter_by(id=address_id).first()
        if user_id != address.user_id:
            return {}, 403
        prev_prim_address = address.user.addresses.filter_by(
            primary_address=True).first()
        if prev_prim_address is None:
            return {}, 404
        prev_prim_address.primary_address = False
        address.primary_address = True
        db.session.add(prev_prim_address)
        db.session.add(address)
        db.session.commit()
        return {"msg": "Primary address has been changed"}, 200