feat: Refactor, implemented loggin

This commit is contained in:
2025-10-21 13:31:52 -05:00
parent 5386355c7f
commit 835de8359e
2 changed files with 127 additions and 38 deletions

View File

@@ -1,8 +1,14 @@
import json
from fastapi import FastAPI, Response
import logging
from typing import Dict, Any, Tuple
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from formats import print_bill, print_customer_order
# Configurar logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = FastAPI(
title="Print Server FastAPI",
description="Server that receive request for printing",
@@ -10,49 +16,103 @@ app = FastAPI(
)
class Info(BaseModel):
class PrintRequest(BaseModel):
content: str
ip_printer: str
user_name: str
@app.post("/print_bill")
def print_ticket_bill(info: Info):
info = dict(info)
data = info["content"]
address = info["ip_printer"]
waiter = info["user_name"]
data = json.loads(data.replace("'", "\""))
print_bill(data, address, waiter)
message = "!Impresion Realizada!"
return Response(content=message, status_code=200)
class PrintResponse(BaseModel):
message: str
success: bool
print_type: str
@app.post("/order_kitchen")
def print_ticket_file_kitchen(info: Info):
info = dict(info)
data = info["content"]
address = info["ip_printer"]
waiter = info["user_name"]
data = json.loads(data.replace("'", "\""))
print_customer_order(data, address, waiter)
def _parse_request_data(info: PrintRequest) -> Tuple[Dict[str, Any], str, str]:
"""Parse and validate request data with better error handling"""
try:
content_clean = info.content.replace("'", "\"")
data = json.loads(content_clean)
message = "!Impresion Realizada!"
logger.info(
f"Print request from {info.user_name} to {info.ip_printer}")
return data, info.ip_printer, info.user_name
return Response(content=message, status_code=200)
except json.JSONDecodeError as e:
logger.error(f"JSON decode error: {str(e)}")
raise HTTPException(status_code=400, detail="Invalid JSON format")
except ValueError as e:
logger.error(f"Validation error: {str(e)}")
raise HTTPException(status_code=400, detail=str(e))
except Exception as e:
logger.error(f"Unexpected error parsing request: {str(e)}")
raise HTTPException(status_code=400, detail="Error processing request")
@app.post("/order_bar")
def print_ticket_file_bar(info: Info):
info = dict(info)
data = info["content"]
address = info["ip_printer"]
waiter = info["user_name"]
data = json.loads(data.replace("'", "\""))
print_customer_order(data, address, waiter)
@app.post("/print_bill", response_model=PrintResponse)
def print_ticket_bill(info: PrintRequest) -> PrintResponse:
"""Print bill ticket"""
try:
data, address, waiter = _parse_request_data(info)
print_bill(data, address, waiter)
message = "!Impresion Realizada!"
logger.info(f"Bill printed successfully for {waiter}")
return PrintResponse(
message="✅ Impresión de cuenta realizada exitosamente!",
success=True,
print_type="bill"
)
except Exception as e:
logger.error(f"Error printing bill: {str(e)}")
raise HTTPException(status_code=500, detail="Error printing bill")
return Response(content=message, status_code=200)
@app.post("/order_kitchen", response_model=PrintResponse)
def print_ticket_kitchen(info: PrintRequest) -> PrintResponse:
"""Print kitchen order"""
try:
data, address, waiter = _parse_request_data(info)
print_customer_order(data, address, waiter)
logger.info(f"Kitchen order printed successfully for {waiter}")
return PrintResponse(
message="✅ Pedido de cocina impreso exitosamente!",
success=True,
print_type="kitchen"
)
except Exception as e:
logger.error(f"Error printing kitchen order: {str(e)}")
raise HTTPException(
status_code=500, detail="Error printing kitchen order")
@app.post("/order_bar", response_model=PrintResponse)
def print_ticket_bar(info: PrintRequest) -> PrintResponse:
"""Print bar order"""
try:
data, address, waiter = _parse_request_data(info)
print_customer_order(data, address, waiter)
logger.info(f"Bar order printed successfully for {waiter}")
return PrintResponse(
message="✅ Pedido de barra impreso exitosamente!",
success=True,
print_type="bar"
)
except Exception as e:
logger.error(f"Error printing bar order: {str(e)}")
raise HTTPException(status_code=500, detail="Error printing bar order")
@app.get("/health")
def health_check() -> Dict[str, str]:
return {
"status": "healthy",
"service": "print_server",
"version": "0.0.1"
}
@app.get("/")
def root() -> Dict[str, str]:
return {"message": "Print Server API is running"}

View File

@@ -20,7 +20,14 @@ def test_print_bill():
response = client.post("/print_bill", json=test_info)
assert response.status_code == 200
assert response.content.decode() == "!Impresion Realizada!"
response_data = response.json()
expected_data = {
"message": "✅ Impresión de cuenta realizada exitosamente!",
"success": True,
"print_type": "bill"
}
assert response_data == expected_data
def test_print_customer_order():
@@ -36,7 +43,14 @@ def test_print_customer_order():
response = client.post("/order_kitchen", json=test_info)
assert response.status_code == 200
assert response.content.decode() == "!Impresion Realizada!"
response_data = response.json()
expected_data = {
"message": "✅ Pedido de cocina impreso exitosamente!",
"success": True,
"print_type": "kitchen"
}
assert response_data == expected_data
def test_print_customer_order_deleted_lines():
@@ -53,7 +67,15 @@ def test_print_customer_order_deleted_lines():
response = client.post("/order_kitchen", json=test_info)
assert response.status_code == 200
assert response.content.decode() == "!Impresion Realizada!"
response_data = response.json()
expected_data = {
"message": "✅ Pedido de cocina impreso exitosamente!",
"success": True,
"print_type": "kitchen"
}
assert response_data == expected_data
def test_print_bar_order():
@@ -69,4 +91,11 @@ def test_print_bar_order():
response = client.post("/order_bar", json=test_info)
assert response.status_code == 200
assert response.content.decode() == "!Impresion Realizada!"
response_data = response.json()
expected_data = {
"message": "✅ Pedido de barra impreso exitosamente!",
"success": True,
"print_type": "bar"
}
assert response_data == expected_data