"""Rotas de API para operações de pedidos.
Expõe endpoints para listar, obter, criar, atualizar status e deletar pedidos.
"""
from fastapi import APIRouter, HTTPException
from src.db.memory_db import orders_db
from src.models.order import Order
router = APIRouter(prefix="/orders", tags=["Orders"])
[docs]
@router.get("/")
def listar_ordens():
"""Lista todas as ordens.
Returns:
list[Order]: Lista de pedidos atualmente armazenados.
"""
return orders_db
[docs]
@router.get("/{order_id}")
def obter_ordem(order_id: int):
"""Obtém uma ordem pelo ID.
Args:
order_id (int): Identificador único da ordem.
Returns:
Order: Ordem correspondente ao ID informado.
Raises:
HTTPException: 404 se a ordem não for encontrada.
"""
for order in orders_db:
if order.id == order_id:
return order
raise HTTPException(status_code=404, detail="Ordem não encontrada")
[docs]
@router.post("/")
def criar_ordem(order: Order):
"""Cria uma nova ordem.
Args:
order (Order): Dados da ordem a ser criada.
Returns:
dict: Mensagem de sucesso e a ordem criada.
Raises:
HTTPException: 400 se já existir uma ordem com o mesmo ID.
"""
if any(o.id == order.id for o in orders_db):
raise HTTPException(status_code=400, detail="ID da ordem já existe")
orders_db.append(order)
return {"mensagem": "Ordem criada com sucesso", "ordem": order}
[docs]
@router.put("/{order_id}/status")
def atualizar_status(order_id: int, status: str):
"""Atualiza o status de uma ordem existente.
Args:
order_id (int): Identificador da ordem.
status (str): Novo status. Valores possíveis: "open", "closed",
"cancelled".
Returns:
dict: Mensagem de sucesso e a ordem atualizada.
Raises:
HTTPException: 404 se a ordem não for encontrada.
"""
for order in orders_db:
if order.id == order_id:
order.status = status
return {
"mensagem": (
f"Status da ordem {order_id} " f"atualizado para {status}"
),
"ordem": order,
}
raise HTTPException(status_code=404, detail="Ordem não encontrada")
[docs]
@router.delete("/{order_id}")
def deletar_ordem(order_id: int):
"""Deleta uma ordem pelo ID.
Args:
order_id (int): Identificador da ordem a ser removida.
Returns:
dict: Mensagem de sucesso e a ordem deletada.
Raises:
HTTPException: 404 se a ordem não for encontrada.
"""
for idx, order in enumerate(orders_db):
if order.id == order_id:
deletada = orders_db.pop(idx)
return {"mensagem": "Ordem deletada com sucesso", "ordem": deletada}
raise HTTPException(status_code=404, detail="Ordem não encontrada")