Spaces:
Running
Running
from flask import Blueprint, request, jsonify | |
import logging | |
from models.feedback_model import Feedback | |
from models.user_model import User | |
from flask_jwt_extended import jwt_required, get_jwt_identity | |
# Cấu hình logging | |
logger = logging.getLogger(__name__) | |
# Tạo blueprint | |
feedback_routes = Blueprint('feedback', __name__) | |
def get_feedback_categories(): | |
"""API endpoint để lấy danh sách categories""" | |
categories = [ | |
{"value": "bug_report", "label": "Báo lỗi"}, | |
{"value": "feature_request", "label": "Đề xuất tính năng"}, | |
{"value": "content_feedback", "label": "Phản hồi nội dung"}, | |
{"value": "user_experience", "label": "Trải nghiệm người dùng"}, | |
{"value": "other", "label": "Khác"} | |
] | |
return jsonify({ | |
"success": True, | |
"categories": categories | |
}) | |
def create_feedback(): | |
"""API endpoint để tạo feedback mới""" | |
try: | |
data = request.json | |
user_id = get_jwt_identity() | |
rating = data.get('rating', 5) | |
category = data.get('category', '') | |
title = data.get('title', '') | |
content = data.get('content', '') | |
if not category or not content.strip(): | |
return jsonify({ | |
"success": False, | |
"error": "Vui lòng điền đầy đủ thông tin" | |
}), 400 | |
if len(content.strip()) < 10: | |
return jsonify({ | |
"success": False, | |
"error": "Nội dung phải có ít nhất 10 ký tự" | |
}), 400 | |
success, result = Feedback.create_feedback( | |
user_id=user_id, | |
rating=rating, | |
category=category, | |
title=title, | |
content=content | |
) | |
if success: | |
return jsonify({ | |
"success": True, | |
"message": "Đã gửi feedback thành công", | |
"feedback_id": result["feedback_id"] | |
}) | |
else: | |
return jsonify({ | |
"success": False, | |
"error": result | |
}), 500 | |
except Exception as e: | |
logger.error(f"Lỗi tạo feedback: {str(e)}") | |
return jsonify({ | |
"success": False, | |
"error": str(e) | |
}), 500 | |
def get_user_feedback(): | |
"""API endpoint để lấy feedback của user hiện tại""" | |
try: | |
user_id = get_jwt_identity() | |
page = int(request.args.get('page', 1)) | |
per_page = int(request.args.get('per_page', 10)) | |
skip = (page - 1) * per_page | |
feedbacks = Feedback.find_by_user(user_id, limit=per_page, skip=skip) | |
result = [] | |
for feedback in feedbacks: | |
result.append({ | |
"id": str(feedback.feedback_id), | |
"rating": feedback.rating, | |
"category": feedback.category, | |
"title": feedback.title, | |
"content": feedback.content, | |
"status": feedback.status, | |
"admin_response": feedback.admin_response, | |
"created_at": feedback.created_at.isoformat(), | |
"updated_at": feedback.updated_at.isoformat() | |
}) | |
return jsonify({ | |
"success": True, | |
"feedbacks": result | |
}) | |
except Exception as e: | |
logger.error(f"Lỗi lấy feedback: {str(e)}") | |
return jsonify({ | |
"success": False, | |
"error": str(e) | |
}), 500 |