Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -538,11 +538,64 @@ def add_member():
|
|
| 538 |
try:
|
| 539 |
db.reference(f"members/{member_id}").set(data)
|
| 540 |
logger.info(f"Member added successfully with ID: {member_id}")
|
| 541 |
-
return jsonify({"message": "Member added"}), 200
|
| 542 |
except Exception as e:
|
| 543 |
logger.error(f"Error adding member {member_id}: {e}", exc_info=True)
|
| 544 |
return jsonify({"error": "Internal server error"}), 500
|
| 545 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 546 |
@app.route("/create_job", methods=["POST"])
|
| 547 |
def create_job():
|
| 548 |
logger.info("Handling /create_job request")
|
|
@@ -587,6 +640,40 @@ def create_job():
|
|
| 587 |
logger.error(f"Error creating job {job_id}: {e}", exc_info=True)
|
| 588 |
return jsonify({"error": "Internal server error"}), 500
|
| 589 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 590 |
@app.route("/schedule_job/<job_id>", methods=["POST"])
|
| 591 |
def schedule_job(job_id):
|
| 592 |
"""Schedule a job to start at a specific time"""
|
|
@@ -1063,4 +1150,4 @@ except Exception as e:
|
|
| 1063 |
# === Run Server ===
|
| 1064 |
if __name__ == "__main__":
|
| 1065 |
logger.info("Starting Flask application...")
|
| 1066 |
-
app.run(debug=True, host="0.0.0.0", port=int(os.getenv("PORT", 7860)))
|
|
|
|
| 538 |
try:
|
| 539 |
db.reference(f"members/{member_id}").set(data)
|
| 540 |
logger.info(f"Member added successfully with ID: {member_id}")
|
| 541 |
+
return jsonify({"message": "Member added", "member_id": member_id}), 200
|
| 542 |
except Exception as e:
|
| 543 |
logger.error(f"Error adding member {member_id}: {e}", exc_info=True)
|
| 544 |
return jsonify({"error": "Internal server error"}), 500
|
| 545 |
|
| 546 |
+
@app.route("/update_member/<member_id>", methods=["POST"])
|
| 547 |
+
def update_member(member_id):
|
| 548 |
+
logger.info(f"Handling /update_member/{member_id} request")
|
| 549 |
+
user = verify_token(request)
|
| 550 |
+
if not user:
|
| 551 |
+
logger.warning(f"Unauthorized access attempt to /update_member/{member_id}")
|
| 552 |
+
return jsonify({"error": "Unauthorized"}), 401
|
| 553 |
+
|
| 554 |
+
data = request.json
|
| 555 |
+
if not data:
|
| 556 |
+
logger.warning(f"Update member request for {member_id} has no JSON body.")
|
| 557 |
+
return jsonify({"error": "Request body cannot be empty"}), 400
|
| 558 |
+
|
| 559 |
+
logger.debug(f"Updating member {member_id} with data: {data}")
|
| 560 |
+
member_ref = db.reference(f"members/{member_id}")
|
| 561 |
+
|
| 562 |
+
# Check if member exists before updating
|
| 563 |
+
if not member_ref.get():
|
| 564 |
+
logger.warning(f"Attempted to update non-existent member {member_id}")
|
| 565 |
+
return jsonify({"error": "Member not found"}), 404
|
| 566 |
+
|
| 567 |
+
try:
|
| 568 |
+
member_ref.update(data)
|
| 569 |
+
logger.info(f"Member {member_id} updated successfully.")
|
| 570 |
+
updated_data = {**data, "id": member_id}
|
| 571 |
+
return jsonify({"message": "Member updated", "member": updated_data}), 200
|
| 572 |
+
except Exception as e:
|
| 573 |
+
logger.error(f"Error updating member {member_id}: {e}", exc_info=True)
|
| 574 |
+
return jsonify({"error": "Internal server error"}), 500
|
| 575 |
+
|
| 576 |
+
@app.route("/delete_member/<member_id>", methods=["DELETE"])
|
| 577 |
+
def delete_member(member_id):
|
| 578 |
+
logger.info(f"Handling /delete_member/{member_id} request")
|
| 579 |
+
user = verify_token(request)
|
| 580 |
+
if not user:
|
| 581 |
+
logger.warning(f"Unauthorized access attempt to /delete_member/{member_id}")
|
| 582 |
+
return jsonify({"error": "Unauthorized"}), 401
|
| 583 |
+
|
| 584 |
+
member_ref = db.reference(f"members/{member_id}")
|
| 585 |
+
|
| 586 |
+
# Check if member exists before deleting
|
| 587 |
+
if not member_ref.get():
|
| 588 |
+
logger.warning(f"Attempted to delete non-existent member {member_id}")
|
| 589 |
+
return jsonify({"error": "Member not found"}), 404
|
| 590 |
+
|
| 591 |
+
try:
|
| 592 |
+
member_ref.delete()
|
| 593 |
+
logger.info(f"Member {member_id} deleted successfully.")
|
| 594 |
+
return jsonify({"message": f"Member {member_id} deleted"}), 200
|
| 595 |
+
except Exception as e:
|
| 596 |
+
logger.error(f"Error deleting member {member_id}: {e}", exc_info=True)
|
| 597 |
+
return jsonify({"error": "Internal server error"}), 500
|
| 598 |
+
|
| 599 |
@app.route("/create_job", methods=["POST"])
|
| 600 |
def create_job():
|
| 601 |
logger.info("Handling /create_job request")
|
|
|
|
| 640 |
logger.error(f"Error creating job {job_id}: {e}", exc_info=True)
|
| 641 |
return jsonify({"error": "Internal server error"}), 500
|
| 642 |
|
| 643 |
+
@app.route("/update_job/<job_id>", methods=["POST"])
|
| 644 |
+
def update_job(job_id):
|
| 645 |
+
logger.info(f"Handling /update_job/{job_id} request")
|
| 646 |
+
user = verify_token(request)
|
| 647 |
+
if not user:
|
| 648 |
+
logger.warning(f"Unauthorized access attempt to /update_job/{job_id}")
|
| 649 |
+
return jsonify({"error": "Unauthorized"}), 401
|
| 650 |
+
|
| 651 |
+
data = request.json
|
| 652 |
+
if not data:
|
| 653 |
+
logger.warning(f"Update job request for {job_id} has no JSON body.")
|
| 654 |
+
return jsonify({"error": "Request body cannot be empty"}), 400
|
| 655 |
+
|
| 656 |
+
logger.debug(f"Updating job {job_id} with data: {data}")
|
| 657 |
+
job_ref = db.reference(f"jobs/{job_id}")
|
| 658 |
+
|
| 659 |
+
# Check if job exists
|
| 660 |
+
if not job_ref.get():
|
| 661 |
+
logger.warning(f"Attempted to update non-existent job {job_id}")
|
| 662 |
+
return jsonify({"error": "Job not found"}), 404
|
| 663 |
+
|
| 664 |
+
try:
|
| 665 |
+
# Prevent overwriting critical, managed fields from a general update endpoint
|
| 666 |
+
data.pop('assignments', None)
|
| 667 |
+
data.pop('rotation_history', None)
|
| 668 |
+
data.pop('status', None)
|
| 669 |
+
|
| 670 |
+
job_ref.update(data)
|
| 671 |
+
logger.info(f"Job {job_id} updated successfully.")
|
| 672 |
+
return jsonify({"message": f"Job {job_id} updated"}), 200
|
| 673 |
+
except Exception as e:
|
| 674 |
+
logger.error(f"Error updating job {job_id}: {e}", exc_info=True)
|
| 675 |
+
return jsonify({"error": "Internal server error"}), 500
|
| 676 |
+
|
| 677 |
@app.route("/schedule_job/<job_id>", methods=["POST"])
|
| 678 |
def schedule_job(job_id):
|
| 679 |
"""Schedule a job to start at a specific time"""
|
|
|
|
| 1150 |
# === Run Server ===
|
| 1151 |
if __name__ == "__main__":
|
| 1152 |
logger.info("Starting Flask application...")
|
| 1153 |
+
app.run(debug=True, host="0.0.0.0", port=int(os.getenv("PORT", 7860)))
|