Files
secure-online-shop/app/api/orders.py
T

59 lines
1.7 KiB
Python

from __future__ import annotations
from typing import Annotated
from fastapi import APIRouter, Depends, status
from sqlalchemy.orm import Session
from app.api.dependencies import get_current_user
from app.db.session import get_db
from app.models.user import User
from app.schemas.order import OrderCreate, OrderResponse
from app.services.order_service import OrderService
router = APIRouter()
@router.post(
"",
response_model=OrderResponse,
status_code=status.HTTP_201_CREATED,
summary="Create an order from cart items",
)
def create_order(
payload: OrderCreate,
db: Annotated[Session, Depends(get_db)],
current_user: Annotated[User, Depends(get_current_user)],
) -> OrderResponse:
order = OrderService(db).create_order(current_user, payload)
return OrderResponse.model_validate(order)
@router.get(
"",
response_model=list[OrderResponse],
status_code=status.HTTP_200_OK,
summary="View the authenticated user's orders",
)
def list_my_orders(
db: Annotated[Session, Depends(get_db)],
current_user: Annotated[User, Depends(get_current_user)],
) -> list[OrderResponse]:
orders = OrderService(db).get_orders_for_user(current_user)
return [OrderResponse.model_validate(order) for order in orders]
@router.get(
"/{order_id}",
response_model=OrderResponse,
status_code=status.HTTP_200_OK,
summary="View a specific order owned by the authenticated user",
)
def get_my_order(
order_id: int,
db: Annotated[Session, Depends(get_db)],
current_user: Annotated[User, Depends(get_current_user)],
) -> OrderResponse:
order = OrderService(db).get_order_for_user(order_id, current_user)
return OrderResponse.model_validate(order)