File size: 8,988 Bytes
a368a1a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
from flask import Flask, request, render_template, redirect, url_for, session, flash, jsonify
from scraper import search_product  # Imports combined scraper functions
import sqlite3

app = Flask(__name__)
app.secret_key = 'your_secret_key'

def init_db():
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
    # Create users table
    cursor.execute('''CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT NOT NULL UNIQUE,
        password TEXT NOT NULL
    )''')
    
    cursor.execute('''CREATE TABLE IF NOT EXISTS saved_items (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL,
    product_name TEXT NOT NULL,
    product_img TEXT,
    amazon_name TEXT,
    amazon_price TEXT,
    amazon_link TEXT,
    one_mg_name TEXT,
    one_mg_price TEXT,
    one_mg_link TEXT,
    netmeds_name TEXT,
    netmeds_price TEXT,
    netmeds_link TEXT,
    pharmeasy_name TEXT,
    pharmeasy_price TEXT,
    pharmeasy_link TEXT,
    FOREIGN KEY(username) REFERENCES users(username)
)''')
    conn.commit()
    conn.close()

init_db()

@app.route('/save_item', methods=['POST'])
def save_item():
    if 'username' not in session:
        return jsonify({'status': 'error', 'message': 'User not logged in'}), 401

    username = session['username']
    data = request.json

    try:
        conn = sqlite3.connect('database.db')
        cursor = conn.cursor()

        # Check if the item is already saved
        cursor.execute('''
            SELECT id FROM saved_items 
            WHERE username = ? AND product_name = ? AND amazon_link = ?
        ''', (username, data['name'], data.get('amazon_link')))
        existing_item = cursor.fetchone()

        if existing_item:
            return jsonify({'status': 'error', 'message': 'Item already saved'})

        # Insert the item if not already saved
        cursor.execute('''
            INSERT INTO saved_items (username, product_name, product_img, amazon_name, amazon_price, amazon_link,
                                     one_mg_name, one_mg_price, one_mg_link,
                                     netmeds_name, netmeds_price, netmeds_link,
                                     pharmeasy_name, pharmeasy_price, pharmeasy_link)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ''', (username, data['name'], data['img'],
              data.get('amazon_name'), data.get('amazon_price'), data.get('amazon_link'),
              data.get('one_mg_name'), data.get('one_mg_price'), data.get('one_mg_link'),
              data.get('netmeds_name'), data.get('netmeds_price'), data.get('netmeds_link'),
              data.get('pharmeasy_name'), data.get('pharmeasy_price'), data.get('pharmeasy_link')))
        conn.commit()
    except Exception as e:
        return jsonify({'status': 'error', 'message': str(e)}), 500
    finally:
        conn.close()

    return jsonify({'status': 'success', 'message': 'Item saved successfully'})


@app.route('/saved_items')
def saved_items():
    if 'username' not in session:
        return redirect(url_for('login'))

    username = session['username']
    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()
    cursor.execute('''
        SELECT product_name, product_img, amazon_name, amazon_price, amazon_link,
               one_mg_name, one_mg_price, one_mg_link,
               netmeds_name, netmeds_price, netmeds_link,
               pharmeasy_name, pharmeasy_price, pharmeasy_link
        FROM saved_items WHERE username = ?
    ''', (username,))
    items = cursor.fetchall()
    conn.close()

    saved_items = [
        {'name': row[0], 'img': row[1],
         'amazon': {'name': row[2], 'price': row[3], 'link': row[4]},
         'one_mg': {'name': row[5], 'price': row[6], 'link': row[7]},
         'netmeds': {'name': row[8], 'price': row[9], 'link': row[10]},
         'pharmeasy': {'name': row[11], 'price': row[12], 'link': row[13]}}
        for row in items
    ]
    return render_template('saved_items.html', saved_items=saved_items, username=username)
    
@app.route('/get_saved_items', methods=['GET'])
def get_saved_items():
    if 'username' not in session:
        return jsonify({'status': 'error', 'message': 'User not logged in'}), 401

    username = session['username']

    try:
        conn = sqlite3.connect('database.db')
        cursor = conn.cursor()
        cursor.execute('SELECT product_name FROM saved_items WHERE username = ?', (username,))
        saved_items = [row[0] for row in cursor.fetchall()]  # List of saved product names
    except Exception as e:
        return jsonify({'status': 'error', 'message': str(e)}), 500
    finally:
        conn.close()

    return jsonify({'status': 'success', 'saved_items': saved_items})


@app.route('/')
def home():
    username = session.get('username', 'Login')
    return render_template('index.html', username=username)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        conn = sqlite3.connect('database.db')
        cursor = conn.cursor()
        cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, password))
        user = cursor.fetchone()
        conn.close()
        if user:
            session['username'] = username
            flash('Login successful!', 'success')
            return redirect(url_for('home'))
        else:
            flash('Invalid username or password', 'danger')
    return render_template('login.html')

# Route for signup
@app.route('/signup', methods=['GET', 'POST'])
def signup():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        confirm_password = request.form.get('password2')

        # Check if passwords match
        if password != confirm_password:
            flash('Confirm Password do not match!', 'error')
            return redirect(url_for('signup'))
        conn = sqlite3.connect('database.db')
        cursor = conn.cursor()
        try:
            cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, password))
            conn.commit()
            flash('Signup successful! Please log in.', 'success')
            return redirect(url_for('login'))
        except sqlite3.IntegrityError:
            flash('Username already exists. Please choose a different one.', 'danger')
        finally:
            conn.close()
    return render_template('signup.html')

@app.route('/result')
def result():
    if 'username' not in session:
        return redirect(url_for('login'))

    username = session['username']

    try:
        conn = sqlite3.connect('database.db')
        cursor = conn.cursor()
        # Fetch all saved product names for the current user
        cursor.execute('SELECT product_name FROM saved_items WHERE username = ?', (username,))
        saved_items = {row[0] for row in cursor.fetchall()}  # Use a set for quick lookups
    except Exception as e:
        flash(f"Error fetching saved items: {e}", 'danger')
        saved_items = set()
    finally:
        conn.close()

    # Replace `products` with your logic for fetching the product list
    products = [
        # Example product structure
        {'name': 'Product 1', 'img': 'image_url', 'amazon': {'name': 'Amazon Prod', 'price': '100'}},
        {'name': 'Product 2', 'img': 'image_url', 'amazon': {'name': 'Amazon Prod 2', 'price': '200'}},
    ]

    return render_template('results.html', products=products, saved_items=saved_items)


@app.route('/logout')
def logout():
    session.pop('username', None)
    flash('You have been logged out.', 'info')
    return redirect(url_for('home'))

@app.route('/search', methods=['POST'])
def search():
    query = request.form['query']
    results = search_product(query)
    username = session.get('username', None)  # Use None if not logged in
    
        # Fetch side effects using your JavaScript logic (moved here for backend processing)
    import requests
    api_url = f'https://api.fda.gov/drug/event.json?api_key=ah8n0nI6468qpS6cMfqvBM0sdGs4nO1sT3Ie7LjJ&search=patient.drug.medicinalproduct:"{query}"'
    try:
        response = requests.get(api_url)
        data = response.json()
        if data.get('results'):
            side_effects = [
                reaction.get('reactionmeddrapt', 'N/A')
                for reaction in data['results'][0].get('patient', {}).get('reaction', [])
            ]
        else:
            side_effects = ["No side effects found."]
    except Exception as e:
        print(f"Error fetching data: {e}")
        side_effects = ["Error fetching data. Please try again."]
    
    return render_template('results.html', products=results, query=query, username=username,side_effects=side_effects)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7860, debug=True)