sales.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from logging import getLogger
  2. from venv import logger
  3. from fastapi.responses import JSONResponse
  4. from config.messages import ErrorResponse, UserResponse
  5. from datetime import datetime, timedelta, time
  6. from services.data_service import DataServiceFactory
  7. from fastapi import APIRouter, Depends
  8. from models.sales import Sale
  9. sale_data_service = DataServiceFactory.get_sales_service()
  10. user_data_service = DataServiceFactory.get_user_service()
  11. logger = getLogger(__name__)
  12. sales_router = APIRouter()
  13. @sales_router.get("/user/{user_id}", response_model=list[Sale])
  14. def get_user_sales(user_id: int):
  15. user = user_data_service.get_by_id(user_id)
  16. if not user:
  17. return JSONResponse(
  18. status_code=404,
  19. content={"message": UserResponse.USER_NOT_FOUND}
  20. )
  21. sales = sale_data_service.get_by_user(user_id)
  22. # solo las ventas del dia, estilo 12pm a 3am del dia siguiente
  23. # suponiendo que today es la fecha de referencia
  24. start = datetime.combine(datetime.today(), time(12, 0)) # hoy a las 12:00 pm
  25. end = start + timedelta(hours=15) # mañana a las 3:00 am
  26. sales = [sale for sale in sales if start <= sale.date < end]
  27. if not sales:
  28. return JSONResponse(status_code=200, content={
  29. "sales": [],
  30. "message": "No se encontraron ventas para el usuario."
  31. })
  32. logger.info(f"Sales found for user {user_id}: {len(sales)} sales")
  33. return JSONResponse(
  34. status_code=200,
  35. content={"sales": [sale.model_dump() for sale in sales], "message": "Ventas obtenidas correctamente."}
  36. )