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 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 pydantic import BaseModel
from formats import print_bill, print_customer_order from formats import print_bill, print_customer_order
# Configurar logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = FastAPI( app = FastAPI(
title="Print Server FastAPI", title="Print Server FastAPI",
description="Server that receive request for printing", description="Server that receive request for printing",
@@ -10,49 +16,103 @@ app = FastAPI(
) )
class Info(BaseModel): class PrintRequest(BaseModel):
content: str content: str
ip_printer: str ip_printer: str
user_name: str user_name: str
@app.post("/print_bill") class PrintResponse(BaseModel):
def print_ticket_bill(info: Info): message: str
info = dict(info) success: bool
data = info["content"] print_type: str
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)
@app.post("/order_kitchen") def _parse_request_data(info: PrintRequest) -> Tuple[Dict[str, Any], str, str]:
def print_ticket_file_kitchen(info: Info): """Parse and validate request data with better error handling"""
info = dict(info) try:
data = info["content"] content_clean = info.content.replace("'", "\"")
address = info["ip_printer"] data = json.loads(content_clean)
waiter = info["user_name"]
data = json.loads(data.replace("'", "\""))
print_customer_order(data, address, waiter)
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") @app.post("/print_bill", response_model=PrintResponse)
def print_ticket_file_bar(info: Info): def print_ticket_bill(info: PrintRequest) -> PrintResponse:
info = dict(info) """Print bill ticket"""
data = info["content"] try:
address = info["ip_printer"] data, address, waiter = _parse_request_data(info)
waiter = info["user_name"] print_bill(data, address, waiter)
data = json.loads(data.replace("'", "\""))
print_customer_order(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) response = client.post("/print_bill", json=test_info)
assert response.status_code == 200 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(): def test_print_customer_order():
@@ -36,7 +43,14 @@ def test_print_customer_order():
response = client.post("/order_kitchen", json=test_info) response = client.post("/order_kitchen", json=test_info)
assert response.status_code == 200 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(): 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) response = client.post("/order_kitchen", json=test_info)
assert response.status_code == 200 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(): def test_print_bar_order():
@@ -69,4 +91,11 @@ def test_print_bar_order():
response = client.post("/order_bar", json=test_info) response = client.post("/order_bar", json=test_info)
assert response.status_code == 200 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