Files
Smartwave/cloud/app.py
T
Ninluc d7889a7bbc
Build, push image, and notify Watchtower / build-image (push) Failing after 2m41s
Build, push image, and notify Watchtower / notify (push) Has been skipped
Flask app init
2026-07-16 17:07:02 +02:00

94 lines
2.9 KiB
Python

import os
import base64
import uuid
from flask import Flask, request, jsonify
from pymongo import MongoClient
# Import your shared device types
from shared import deviceTypes
app = Flask(__name__)
# ---------------------------------------------------------
# Configuration & Setup
# ---------------------------------------------------------
# Configure MongoDB connection (adjust the URI as needed for your environment)
client = MongoClient("mongodb://localhost:27017/")
db = client["microwave_network_db"]
cooking_collection = db["cooking_parameters"]
device_network_collection = db["device_network"]
# Ensure the photo storage directory exists when the app starts
PHOTO_DIR = "storage/dishPhotos"
os.makedirs(PHOTO_DIR, exist_ok=True)
# ---------------------------------------------------------
# Routes
# ---------------------------------------------------------
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
@app.route("/cooking-params", methods=["POST"])
def cooking_params():
data = request.get_json()
if not data:
return jsonify({"error": "Invalid or missing JSON payload"}), 400
# 1. Handle the Photo
photo_b64 = data.get("photo")
if photo_b64:
# Generate a unique filename using UUID to avoid overwriting
filename = f"dish_{uuid.uuid4().hex}.jpg"
filepath = os.path.join(PHOTO_DIR, filename)
try:
# Decode the base64 string and save it as a binary file
with open(filepath, "wb") as f:
f.write(base64.b64decode(photo_b64))
# Replace the giant base64 string in the dictionary with the local file path
# so we don't bloat the MongoDB document
data["photo"] = filepath
except Exception as e:
return jsonify({"error": f"Failed to save photo: {str(e)}"}), 500
# 2. Save to MongoDB
try:
# Insert the dictionary directly into Mongo (it will retain your exact JSON keys)
cooking_collection.insert_one(data)
# Remove the Mongo-injected '_id' object before returning the response
data.pop("_id", None)
return jsonify({"message": "Cooking parameters saved successfully", "data": data}), 201
except Exception as e:
return jsonify({"error": f"Database error: {str(e)}"}), 500
@app.route("/device-network", methods=["POST"])
def device_network():
data = request.get_json()
if not data:
return jsonify({"error": "Invalid or missing JSON payload"}), 400
# 2. Save to MongoDB
try:
# Insert the dictionary directly into Mongo (it will retain your exact JSON keys)
device_network_collection.insert_one(data)
return "", 200
except Exception as e:
return jsonify({"error": f"Database error: {str(e)}"}), 500
if __name__ == "__main__":
app.run(debug=True)