Add notes API only
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user