main.py

 avatar
unknown
python
a year ago
5.2 kB
5
Indexable
'''
Add to `main.py`
Summary of Changes
Added endpoint to approve prices in bulk for a batch.
Added endpoint to publish approved prices in bulk for a batch.
Added endpoint to manually approve a single price.
Added endpoint to manually publish a single approved price.
'''

#API to Approve Prices
# Approve prices in bulk for a batch
@app.patch(
    "/v1/prices/batch/{job_id}/approve",
    response_model=List[MenuItemPrice],
    tags=["pricing"],
    summary="Approve prices in bulk for a batch",
    description="This endpoint approves prices in bulk for a specified batch job.",
    responses={
        200: {
            "description": "The list of approved menu item prices.",
        },
        404: {
            "description": "Job or menu item prices not found."
        }
    }
)
def approve_prices(job_id: int, user_id: int):
    existing_job = next((j for j in mock_jobs if j["id"] == job_id), None)
    if not existing_job:
        raise HTTPException(status_code=404, detail="Job not found")

    if not any(u["id"] == user_id for u in mock_users):
        raise HTTPException(status_code=404, detail="User not found")

    approved_prices = []
    for price in mock_menu_item_prices:
        if price["job_id"] == job_id:
            price["approved"] = True
            price["approved_by"] = user_id
            price["approved_at"] = datetime.now().isoformat()
            approved_prices.append(price)
    
    if not approved_prices:
        raise HTTPException(status_code=404, detail="Menu item prices not found")
    
    return approved_prices


#API to publish prices
# Publish approved prices in bulk for a batch
@app.patch(
    "/v1/prices/batch/{job_id}/publish",
    response_model=List[MenuItemPrice],
    tags=["pricing"],
    summary="Publish approved prices in bulk for a batch",
    description="This endpoint publishes approved prices in bulk for a specified batch job.",
    responses={
        200: {
            "description": "The list of published menu item prices.",
        },
        404: {
            "description": "Job or menu item prices not found."
        }
    }
)
def publish_prices(job_id: int, user_id: int):
    existing_job = next((j for j in mock_jobs if j["id"] == job_id), None)
    if not existing_job:
        raise HTTPException(status_code=404, detail="Job not found")

    if not any(u["id"] == user_id for u in mock_users):
        raise HTTPException(status_code=404, detail="User not found")

    published_prices = []
    for price in mock_menu_item_prices:
        if price["job_id"] == job_id and price["approved"]:
            price["published"] = True
            price["published_by"] = user_id
            price["published_at"] = datetime.now().isoformat()
            published_prices.append(price)
    
    if not published_prices:
        raise HTTPException(status_code=404, detail="Approved menu item prices not found")
    
    return published_prices


#API to Manually Approve a Single Price

# Approve a single menu item price manually
@app.patch(
    "/v1/prices/{price_id}/approve",
    response_model=MenuItemPrice,
    tags=["pricing"],
    summary="Approve a single menu item price manually",
    description="This endpoint approves a single menu item price manually.",
    responses={
        200: {
            "description": "The approved menu item price.",
        },
        404: {
            "description": "Menu item price not found."
        }
    }
)
def approve_price(price_id: int, user_id: int):
    existing_price = next((p for p in mock_menu_item_prices if p["id"] == price_id), None)
    if not existing_price:
        raise HTTPException(status_code=404, detail="Menu item price not found")

    if not any(u["id"] == user_id for u in mock_users):
        raise HTTPException(status_code=404, detail="User not found")

    existing_price["approved"] = True
    existing_price["approved_by"] = user_id
    existing_price["approved_at"] = datetime.now().isoformat()
    
    return existing_price


#API to Manually Publish a Single Price
# Publish a single approved menu item price manually
@app.patch(
    "/v1/prices/{price_id}/publish",
    response_model=MenuItemPrice,
    tags=["pricing"],
    summary="Publish a single approved menu item price manually",
    description="This endpoint publishes a single approved menu item price manually.",
    responses={
        200: {
            "description": "The published menu item price.",
        },
        404: {
            "description": "Menu item price not found or not approved."
        }
    }
)
def publish_price(price_id: int, user_id: int):
    existing_price = next((p for p in mock_menu_item_prices if p["id"] == price_id), None)
    if not existing_price:
        raise HTTPException(status_code=404, detail="Menu item price not found")

    if not existing_price["approved"]:
        raise HTTPException(status_code=400, detail="Menu item price is not approved")

    if not any(u["id"] == user_id for u in mock_users):
        raise HTTPException(status_code=404, detail="User not found")

    existing_price["published"] = True
    existing_price["published_by"] = user_id
    existing_price["published_at"] = datetime.now().isoformat()
    
    return existing_price

Editor is loading...
Leave a Comment