From 1a82776657b88b30eb4930d3f882f225ae544135 Mon Sep 17 00:00:00 2001 From: James Pattinson Date: Wed, 18 Feb 2026 06:15:48 -0500 Subject: [PATCH] Add notes API only --- backend/app/main.py | 72 +++++++++++++++++++++++++++++++++ mosquitto/config/mosquitto.conf | 2 +- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/backend/app/main.py b/backend/app/main.py index 8822bfe..c7ba3a3 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -133,6 +133,17 @@ class LabelPrintResponse(BaseModel): success: bool message: str +class NotesVariables(BaseModel): + animal_name: str + notes: str + +class NotesPrintRequest(BaseModel): + variables: NotesVariables + +class NotesPrintResponse(BaseModel): + success: bool + message: str + # Authentication Routes @router.post("/auth/register", response_model=TokenResponse) def register(user_data: UserCreate, db: Session = Depends(get_db)): @@ -575,5 +586,66 @@ def print_label(label_request: LabelPrintRequest, current_user: User = Depends(g detail=f"Error sending label print request: {str(e)}" ) +# Notes printing endpoint +@router.post("/notes/print", response_model=NotesPrintResponse) +def print_notes(notes_request: NotesPrintRequest, current_user: User = Depends(get_current_user)): + """ + Print notes by publishing an MQTT message + + This endpoint publishes a notes print request to the MQTT broker, + which will be picked up by the label printing service. + """ + try: + # Get notes template configuration from environment + import os + template_id = os.getenv("NOTES_TEMPLATE_ID", "notes_template") + label_size = os.getenv("LABEL_SIZE", "29x90") + test_mode = os.getenv("LABEL_TEST", "false").lower() == "true" + + # Capitalize text fields for better presentation + variables = notes_request.variables.dict() + variables["animal_name"] = capitalize_label_text(variables["animal_name"]) + variables["notes"] = capitalize_label_text(variables["notes"]) + + # Convert the request to the MQTT message format + mqtt_message = { + "template_id": template_id, + "label_size": label_size, + "variables": variables, + "test": test_mode + } + + # Publish to MQTT and wait for response + success, response = publish_label_print_with_response(mqtt_message, timeout=10.0) + + print(f"Notes print result: success={success}, response={response}") + + if success: + result = NotesPrintResponse( + success=True, + message=response.get("message", "Notes printed successfully") + ) + print(f"Returning success response: {result}") + return result + else: + # Return error details from printer + # Check both 'message' and 'error' fields for error details + if response: + error_msg = response.get("message") or response.get("error", "Unknown error") + else: + error_msg = "No response from printer" + result = NotesPrintResponse( + success=False, + message=f"Print failed: {error_msg}" + ) + print(f"Returning error response: {result}") + return result + + except Exception as e: + raise HTTPException( + status_code=500, + detail=f"Error sending notes print request: {str(e)}" + ) + # Include router with /api prefix app.include_router(router) diff --git a/mosquitto/config/mosquitto.conf b/mosquitto/config/mosquitto.conf index d0be93e..40864f8 100644 --- a/mosquitto/config/mosquitto.conf +++ b/mosquitto/config/mosquitto.conf @@ -12,7 +12,7 @@ password_file /mosquitto/config/pwfile # Logging log_dest stdout log_timestamp true -log_type all +#log_type all # Performance max_connections -1