|
|
|
|
|
|
|
|
from flask import request, jsonify |
|
|
from models.schemas.log_schema import create_log |
|
|
from models.schemas.health_schema import create_health_record |
|
|
from models.schemas.inventory_schema import create_inventory_item, update_inventory_item |
|
|
from models.schemas.usage_schema import create_usage_record |
|
|
|
|
|
|
|
|
|
|
|
def log_user_action(user_id, message, level="INFO", metadata=None): |
|
|
""" |
|
|
Logs a general user action. |
|
|
|
|
|
:param user_id: The ID of the user performing the action. |
|
|
:param message: Description of the action. |
|
|
:param level: Log level (default is "INFO"). |
|
|
:param metadata: Additional information about the action. |
|
|
:return: JSON response indicating success or failure. |
|
|
""" |
|
|
try: |
|
|
ip_address = request.remote_addr |
|
|
log_id = create_log(level, message, metadata, ip_address, user_id) |
|
|
return jsonify({"message": "Action logged successfully", "log_id": log_id}), 201 |
|
|
except Exception as e: |
|
|
return jsonify({"error": str(e)}), 500 |
|
|
|
|
|
|
|
|
|
|
|
def log_health_record(user_id, poultry_id, disease_name, status, recommendation, image_path=None): |
|
|
""" |
|
|
Logs a health record for a poultry bird. |
|
|
|
|
|
:param user_id: The ID of the user managing the poultry. |
|
|
:param poultry_id: The unique identifier for the poultry bird. |
|
|
:param disease_name: The name of the detected disease. |
|
|
:param status: The health status of the bird (e.g., "Critical", "No issue"). |
|
|
:param recommendation: The recommended treatment or action. |
|
|
:param image_path: Optional. The path to an image related to the health record. |
|
|
:return: JSON response indicating success or failure. |
|
|
""" |
|
|
try: |
|
|
record_id = create_health_record(user_id, poultry_id, disease_name, status, recommendation, image_path) |
|
|
|
|
|
log_message = f"Health record created for poultry ID {poultry_id} - Disease: {disease_name}" |
|
|
log_user_action(user_id, log_message, "INFO") |
|
|
return jsonify({"message": "Health record logged successfully", "record_id": record_id}), 201 |
|
|
except Exception as e: |
|
|
return jsonify({"error": str(e)}), 500 |
|
|
|
|
|
|
|
|
|
|
|
def log_inventory_addition(user_id, item_name, category, quantity, unit, description=None): |
|
|
""" |
|
|
Logs an inventory addition (e.g., adding feed, medicine). |
|
|
|
|
|
:param user_id: The ID of the user managing the inventory. |
|
|
:param item_name: The name of the inventory item. |
|
|
:param category: The category of the item (e.g., "Feed", "Medicine"). |
|
|
:param quantity: The quantity added. |
|
|
:param unit: The unit of measurement (e.g., "kg", "liters"). |
|
|
:param description: Optional. Additional notes or description of the item. |
|
|
:return: JSON response indicating success or failure. |
|
|
""" |
|
|
try: |
|
|
item_id = create_inventory_item(item_name, category, quantity, unit, user_id, description=description) |
|
|
|
|
|
log_message = f"Inventory item added: {item_name}, Quantity: {quantity} {unit}" |
|
|
log_user_action(user_id, log_message, "INFO") |
|
|
return jsonify({"message": "Inventory item logged successfully", "item_id": item_id}), 201 |
|
|
except Exception as e: |
|
|
return jsonify({"error": str(e)}), 500 |
|
|
|
|
|
|
|
|
|
|
|
def log_inventory_update(user_id, item_id, updated_fields): |
|
|
""" |
|
|
Logs an update to an inventory item (e.g., when quantity is used). |
|
|
|
|
|
:param user_id: The ID of the user managing the inventory. |
|
|
:param item_id: The ID of the inventory item being updated. |
|
|
:param updated_fields: The fields to be updated (e.g., "used_quantity", "quantity"). |
|
|
:return: JSON response indicating success or failure. |
|
|
""" |
|
|
try: |
|
|
update_success = update_inventory_item(item_id, updated_fields) |
|
|
if update_success: |
|
|
|
|
|
log_message = f"Inventory item updated: {item_id} - {updated_fields}" |
|
|
log_user_action(user_id, log_message, "INFO") |
|
|
return jsonify({"message": "Inventory item updated successfully"}), 200 |
|
|
else: |
|
|
return jsonify({"message": "Inventory item update failed"}), 400 |
|
|
except Exception as e: |
|
|
return jsonify({"error": str(e)}), 500 |
|
|
|
|
|
|
|
|
|
|
|
def log_assistant_usage(user_id, manager_id, interaction_type, metadata=None): |
|
|
""" |
|
|
Logs the usage of the assistant by a user. |
|
|
|
|
|
:param user_id: The ID of the user interacting with the assistant. |
|
|
:param manager_id: The ID of the manager overseeing the user. |
|
|
:param interaction_type: The type of interaction (e.g., "disease_detection", "inventory_management"). |
|
|
:param metadata: Optional. Additional details about the interaction. |
|
|
:return: JSON response indicating success or failure. |
|
|
""" |
|
|
try: |
|
|
usage_record_id = create_usage_record(user_id, manager_id, interaction_type, metadata) |
|
|
|
|
|
log_message = f"Assistant interaction logged: {interaction_type} by user {user_id}" |
|
|
log_user_action(user_id, log_message, "INFO", metadata) |
|
|
return jsonify({"message": "Assistant usage logged successfully", "usage_record_id": usage_record_id}), 201 |
|
|
except Exception as e: |
|
|
return jsonify({"error": str(e)}), 500 |
|
|
|