File size: 1,840 Bytes
b74eb81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import psycopg2
from flask import Flask, request, jsonify, render_template, session
from ..models.votes import Votes

def handle_votes(conn, review_id):

    cursor = conn.cursor()

    try:
        data = request.get_json()
        vote_type_str = data.get('vote_type')


        vote_type = 1 if vote_type_str == 'upvote' else -1

        username = session.get("user_id")

        existing_vote = Votes.check_vote(cursor, username, review_id)

        action = ""

        if existing_vote:
            existing_vote_id = existing_vote[0]
            existing_vote_type = existing_vote[1]


            if existing_vote_type == vote_type:
                Votes.delete_vote(cursor, existing_vote_id)
                action += 'removed'
            else:

                Votes.edit_vote(cursor, existing_vote_id, vote_type)
                action += 'changed'
        else:

            Votes.update_vote_id(cursor)

            Votes.create_vote(cursor, review_id, username, vote_type)
            action += 'added'

        conn.commit()

        counts = Votes.count_votes(cursor, review_id)

        cursor.close()


        return jsonify({
            'success': True,
            'action': action,
            'upvotes': counts[0] if counts[0] else 0,
            'downvotes': counts[1] if counts[1] else 0,
            'message': f'Vote {action} successfully'
        })

    except psycopg2.Error as e:
        conn.rollback()
        cursor.close()

        return jsonify({
            'success': False,
            'message': f'Database error: {str(e)}'
        }), 500

    except Exception as e:
        conn.rollback()
        cursor.close()

        return jsonify({
            'success': False,
            'message': f'Error: {str(e)}'
        }), 500

    finally:
        cursor.close()
        conn.close()