61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
from fastapi import APIRouter, Depends
|
|
|
|
from app.deps import SessionDep, require_bot, telegram_owner
|
|
from app.schemas import BotCartAdd, BotOrderCreate, CartOut, DialogIn, DialogOut, OrderOut
|
|
from app.services import (
|
|
add_item,
|
|
checkout,
|
|
clear_dialog,
|
|
get_dialog,
|
|
load_cart,
|
|
remove_item,
|
|
save_dialog,
|
|
)
|
|
|
|
router = APIRouter(prefix="/internal", dependencies=[Depends(require_bot)])
|
|
|
|
|
|
@router.post("/cart/items", response_model=CartOut)
|
|
async def bot_add_item(body: BotCartAdd, db: SessionDep) -> CartOut:
|
|
return await add_item(
|
|
db,
|
|
owner_key=telegram_owner(body.telegram_user_id),
|
|
product_id=body.product_id,
|
|
qty=body.qty,
|
|
)
|
|
|
|
|
|
@router.get("/cart/{telegram_user_id}", response_model=CartOut)
|
|
async def bot_cart(telegram_user_id: int, db: SessionDep) -> CartOut:
|
|
return await load_cart(db, telegram_owner(telegram_user_id))
|
|
|
|
|
|
@router.delete("/cart/{telegram_user_id}/{product_id}", response_model=CartOut)
|
|
async def bot_remove(telegram_user_id: int, product_id: int, db: SessionDep) -> CartOut:
|
|
return await remove_item(db, owner_key=telegram_owner(telegram_user_id), product_id=product_id)
|
|
|
|
|
|
@router.get("/dialog/{telegram_user_id}", response_model=DialogOut | None)
|
|
async def bot_get_dialog(telegram_user_id: int, db: SessionDep) -> DialogOut | None:
|
|
return await get_dialog(db, telegram_user_id)
|
|
|
|
|
|
@router.put("/dialog/{telegram_user_id}", response_model=DialogOut)
|
|
async def bot_put_dialog(telegram_user_id: int, body: DialogIn, db: SessionDep) -> DialogOut:
|
|
return await save_dialog(db, telegram_user_id, body.step, body.name)
|
|
|
|
|
|
@router.delete("/dialog/{telegram_user_id}", status_code=204)
|
|
async def bot_delete_dialog(telegram_user_id: int, db: SessionDep) -> None:
|
|
await clear_dialog(db, telegram_user_id)
|
|
|
|
|
|
@router.post("/orders", response_model=OrderOut)
|
|
async def bot_order(body: BotOrderCreate, db: SessionDep) -> OrderOut:
|
|
return await checkout(
|
|
db,
|
|
owner_key=telegram_owner(body.telegram_user_id),
|
|
customer_name=body.customer_name,
|
|
customer_phone=body.customer_phone,
|
|
)
|