invix_test_task/api/app/routers/internal.py

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,
)