File size: 3,782 Bytes
8275526
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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__)

@feedback_routes.route('/feedback/categories', methods=['GET'])
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
    })

@feedback_routes.route('/feedback', methods=['POST'])
@jwt_required()
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

@feedback_routes.route('/feedback', methods=['GET'])
@jwt_required()
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