You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/app/api/routes/mock.py

168 lines
5.1 KiB
Python

from typing import Any, Dict, List
from fastapi import APIRouter, HTTPException
from sqlalchemy.exc import SQLAlchemyError
from app.api.routes.dependencies import db_error_detail
from app.api.schemas import (
AgendarRevisaoRequest,
AvaliarVeiculoTrocaRequest,
CancelarAgendamentoRevisaoRequest,
CancelarPedidoRequest,
ConsultarEstoqueRequest,
EditarDataRevisaoRequest,
ListarAgendamentosRevisaoRequest,
RealizarPedidoRequest,
ValidarClienteVendaRequest,
)
from app.services.tools.handlers import (
agendar_revisao,
avaliar_veiculo_troca,
cancelar_agendamento_revisao,
cancelar_pedido,
editar_data_revisao,
listar_agendamentos_revisao,
consultar_estoque,
realizar_pedido,
validar_cliente_venda,
)
router = APIRouter(prefix="/mock", tags=["Mock"])
@router.post("/consultar-estoque")
async def consultar_estoque_endpoint(
body: ConsultarEstoqueRequest,
) -> List[Dict[str, Any]]:
"""Consulta estoque de veiculos mock com filtros opcionais."""
try:
return await consultar_estoque(
preco_max=body.preco_max,
categoria=body.categoria,
ordenar_preco=body.ordenar_preco,
limite=body.limite,
)
except SQLAlchemyError as exc:
raise HTTPException(status_code=503, detail=db_error_detail(exc))
@router.post("/validar-cliente-venda")
async def validar_cliente_venda_endpoint(
body: ValidarClienteVendaRequest,
) -> Dict[str, Any]:
"""Valida elegibilidade de cliente para uma venda."""
try:
return await validar_cliente_venda(
cpf=body.cpf,
valor_veiculo=body.valor_veiculo,
)
except SQLAlchemyError as exc:
raise HTTPException(status_code=503, detail=db_error_detail(exc))
@router.post("/avaliar-veiculo-troca")
async def avaliar_veiculo_troca_endpoint(
body: AvaliarVeiculoTrocaRequest,
) -> Dict[str, Any]:
"""Avalia valor de troca de um veiculo com base em modelo, ano e quilometragem."""
return await avaliar_veiculo_troca(
modelo=body.modelo,
ano=body.ano,
km=body.km,
)
@router.post("/agendar-revisao")
async def agendar_revisao_endpoint(
body: AgendarRevisaoRequest,
) -> Dict[str, Any]:
"""Agenda revisao para uma placa em data/hora informada."""
try:
return await agendar_revisao(
placa=body.placa,
data_hora=body.data_hora,
modelo=body.modelo,
ano=body.ano,
km=body.km,
revisao_previa_concessionaria=body.revisao_previa_concessionaria,
user_id=body.user_id,
)
except SQLAlchemyError as exc:
raise HTTPException(status_code=503, detail=db_error_detail(exc))
@router.post("/listar-agendamentos-revisao")
async def listar_agendamentos_revisao_endpoint(
body: ListarAgendamentosRevisaoRequest,
) -> List[Dict[str, Any]]:
"""Lista os agendamentos de revisao do usuario autenticado."""
try:
return await listar_agendamentos_revisao(
user_id=body.user_id,
placa=body.placa,
status=body.status,
limite=body.limite,
)
except SQLAlchemyError as exc:
raise HTTPException(status_code=503, detail=db_error_detail(exc))
@router.post("/cancelar-agendamento-revisao")
async def cancelar_agendamento_revisao_endpoint(
body: CancelarAgendamentoRevisaoRequest,
) -> Dict[str, Any]:
"""Cancela agendamento de revisao usando o protocolo."""
try:
return await cancelar_agendamento_revisao(
protocolo=body.protocolo,
motivo=body.motivo,
user_id=body.user_id,
)
except SQLAlchemyError as exc:
raise HTTPException(status_code=503, detail=db_error_detail(exc))
@router.post("/editar-data-revisao")
async def editar_data_revisao_endpoint(
body: EditarDataRevisaoRequest,
) -> Dict[str, Any]:
"""Edita data e hora de um agendamento de revisao existente."""
try:
return await editar_data_revisao(
protocolo=body.protocolo,
nova_data_hora=body.nova_data_hora,
user_id=body.user_id,
)
except SQLAlchemyError as exc:
raise HTTPException(status_code=503, detail=db_error_detail(exc))
@router.post("/cancelar-pedido")
async def cancelar_pedido_endpoint(
body: CancelarPedidoRequest,
) -> Dict[str, Any]:
"""Cancela pedido de venda existente registrando o motivo."""
try:
return await cancelar_pedido(
numero_pedido=body.numero_pedido,
motivo=body.motivo,
user_id=body.user_id,
)
except SQLAlchemyError as exc:
raise HTTPException(status_code=503, detail=db_error_detail(exc))
@router.post("/realizar-pedido")
async def realizar_pedido_endpoint(
body: RealizarPedidoRequest,
) -> Dict[str, Any]:
"""Cria um pedido de compra para cliente aprovado no valor informado."""
try:
return await realizar_pedido(
cpf=body.cpf,
valor_veiculo=body.valor_veiculo,
user_id=body.user_id,
)
except SQLAlchemyError as exc:
raise HTTPException(status_code=503, detail=db_error_detail(exc))