2026-05-01 11:12:13 +03:00

52 lines
1.6 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List
from app.database.database import get_db
from app.schemas.order import OrderCreate, OrderResponse
from app.services.order import (
create_order,
get_order_by_id,
get_user_orders,
update_order_status,
)
from app.services.auth import verify_token
router = APIRouter(prefix="/api/orders", tags=["orders"])
def get_user_id_from_token(token: str) -> int:
user_id = verify_token(token)
if user_id is None:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid token",
)
return user_id
@router.post("", response_model=OrderResponse)
def create_new_order(token: str, order_data: OrderCreate, db: Session = Depends(get_db)):
user_id = get_user_id_from_token(token)
order = create_order(db, user_id, order_data)
if not order:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Cannot create order with empty cart",
)
return order
@router.get("/user/orders", response_model=List[OrderResponse])
def get_user_order_history(token: str, db: Session = Depends(get_db)):
user_id = get_user_id_from_token(token)
return get_user_orders(db, user_id)
@router.get("/{order_id}", response_model=OrderResponse)
def get_order(order_id: int, token: str, db: Session = Depends(get_db)):
user_id = get_user_id_from_token(token)
order = get_order_by_id(db, order_id)
if not order or order.user_id != user_id:
raise HTTPException(status_code=404, detail="Order not found")
return order