Static_H / newerrors
MissSqui's picture
Create newerrors
68715d4 verified
// Feedback Modal POP-UP on Back Button
backButton.addEventListener("click", async function(event){
console.log("Back button clicked");
event.preventDefault();
if(!currentZoneId){
console.log("no configuration selected, going back directly")
window.location.href = `/notebook/?effort_id=${effortId}&user_id=${userId}`;
return;
}
console.log("Debug BackBtn:", {userId, notebookId, currentZoneId, effortId});
try {
console.log("Checking user feedback eligibility...");
// CHANGED/ADDED: Fetch eligibility data from the server
const response = await fetch(`/chat_feature/user_feedback_eligibility?user_id=${userId}&notebook_id=${notebookId}&zone_id=${currentZoneId}`);
const data = await response.json();
if (data.eligible_for_feedback) {
console.log("User is eligible for feedback:", data);
// CHANGED/ADDED: Initialize the modal here
if(data.has_feedback){
document.getElementById("feedbackLevel").value = data.rating ||"";
document.getElementById("comment").value = data.comment ||"";
document.getElementById("updateNotice").style.display = "block";
}
else{
document.getElementById("feedbackLevel").value = data.rating ||"";
document.getElementById("comment").value = data.comment ||"";
document.getElementById("updateNotice").style.display = "none";
}
// CHANGED/ADDED: Now modal will always be initialized and ready here
console.log(bootstrapFeedbackModal);
if (bootstrapFeedbackModal) {
console.log("Showing feedback modal");
bootstrapFeedbackModal.show();
} else {
alert("Feedback modal not initialized!");
}
} else {
console.log("User is not eligible for feedback:", data);
window.location.href = `/notebook/?effort_id=${effortId}&user_id=${userId}`;
}
} catch (error) {
console.error('Error checking eligibility:', error);
window.location.href = `/notebook/?effort_id=${effortId}&user_id=${userId}`;
}
});
// Feedback Submit
document.getElementById("submitFeedback").addEventListener("click", async function () {
const rating = document.getElementById("feedbackLevel").value;
const comment = document.getElementById("comment").value;
const payload = {
user_id: userId,
notebook_id: parseInt(notebookId),
effort_id: parseInt(effortId),
zone_id: parseInt(currentZoneId),
rating: rating ? parseInt(rating) : null,
comment: comment
};
try {
const response = await fetch("/chat_feature/submit_feedback", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
});
if (response.ok) {
bootstrapFeedbackModal.hide();
window.location.href = `/notebook/?effort_id=${effortId}&user_id=${userId}`;
} else {
alert("Error submitting feedback");
}
} catch (error) {
console.error("Error submitting feedback:", error);
alert("Error submitting feedback");
}
});
// Skip feedback
document.getElementById("skipFeedback").addEventListener("click", function () {
bootstrapFeedbackModal.hide();
window.location.href = `/notebook/?effort_id=${effortId}&user_id=${userId}`;
}); ------
# #-------to post the feedback data-------
@chat_feature_bp.route('/submit_feedback', methods=['POST'])
@login_required
def submit_feedback():
data = request.json
print(data)
feedback_payload = {
"user_id": data.get("user_id"),
"notebook_id": data.get("notebook_id"),
"effort_id": data.get("effort_id"),
"zone_id": data.get("zone_id"),
"rating": data.get("rating"),
"comment": data.get("comment"),
}
response = requests.post("http://localhost:8044/feedback/", json = feedback_payload)
print("Recieved Feedback", feedback_payload)
return jsonify(response.json()),response.status_code
@chat_feature_bp.route("/user_feedback_eligibility", methods=["GET"])
@login_required
def user_feedback_eligibility():
user_id = request.args.get("user_id")
notebook_id = request.args.get("notebook_id")
zone_id = request.args.get("zone_id")
if not zone_id:
return jsonify({"eligible_for_feedback": False})
try:
notebook_response = requests.get(f"http://localhost:8044/user/get_notebook_details/{notebook_id}")
notebook_response.raise_for_status()
chat_data = notebook_response.json().get('chat', {}).get('message', [])
eligible = len(chat_data) > 0
except Exception as e:
print(f"Error fetching notebook details: {e}")
return jsonify({"eligible_for_feedback": False, "error": "notebook fetch failed"}), 500
try:
feedback_response = requests.get(
"http://localhost:8044/feedback/",
params={"user_id": user_id, "notebook_id": notebook_id, "zone_id": zone_id}
)
feedback_data = feedback_response.json() if feedback_response.ok else {"exists": False}
except Exception as e:
print(f"Error fetching feedback: {e}")
feedback_data = {"exists": False}
response = {
"eligible_for_feedback": eligible,
"has_feedback": feedback_data.get("exists", False)
}
if feedback_data.get("exists"):
response.update({
"rating": feedback_data.get("rating"),
"comment": feedback_data.get("comment")
})
print("User feedback eligibility response:", response)
return jsonify(response) ---> this is flask ui python file and #created a api to call that create_feedback function-------
@router.post("/feedback/")
async def create_feedback_endpoint(feedback: Feedback):
try:
# result = create_feedback(user_id= feedback.user_id, notebook_id= feedback.notebook_id, effort_id= feedback.effort_id, rating= feedback.rating, comment= feedback.comment)
create_or_update_feedback(
user_id=feedback.user_id,
notebook_id=feedback.notebook_id,
effort_id=feedback.effort_id,
zone_id=feedback.zone_id,
rating=feedback.rating,
comment=feedback.comment
)
return {"message": "Feedback submitted successfully"}
except Exception as e:
raise HTTPException(status_code=500, detail="Failed to submit feedback")
@router.get("/feedback/")
async def get_existing_feedback(user_id: str, notebook_id: str, zone_id: str):
try:
feedback= get_feedback(user_id, notebook_id, zone_id)
if feedback:
return{"exists": True, "rating": feedback["rating"], "comment": feedback["comment"]}
else:
return{"exists": False}
except Exception as e:
raise HTTPException(status_code=500, details="Failed to fetch feedback") --> this my backend api endpoint with class #feedbackModal class
class Feedback(BaseModel):
user_id: str
notebook_id: str
effort_id: str
zone_id: str
#rating: Optional[str] = None
rating: Optional[int] = None
comment: Optional[str] = None