File size: 4,455 Bytes
9249145
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from flask import Flask, render_template, request, redirect, url_for, jsonify, session
from supabase import create_client, Client
from dotenv import load_dotenv
import os

load_dotenv()
# Initialize Flask app
app = Flask(__name__)
app.secret_key = os.urandom(24)


SUPABASE_URL = os.getenv('SUPABASE_URL')
SUPABASE_KEY = os.getenv('SUPABASE_KEY')
supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)


# Admin credentials (for simplicity, hardcoded; use env vars in production)
ADMIN_USERNAME = os.getenv('ADMIN_USERNAME', 'default_admin')
ADMIN_PASSWORD = os.getenv('ADMIN_PASSWORD', 'default_password')
# Home Page Route
@app.route('/')
def home():
    return render_template('home.html')

# Product List Page Route
@app.route('/products')
def products():
    response = supabase.table('products').select('*').execute()
    products = response.data
    return render_template('product_list.html', products=products)

# Product Detail Page Route
@app.route('/products/<int:product_id>')
def product_detail(product_id):
    response = supabase.table('products').select('*').eq('id', product_id).execute()
    if response.data:
        product = response.data[0]
        return render_template('product_detail.html', product=product)
    else:
        return "Product not found", 404

# Admin Login Page Route
@app.route('/admin/login', methods=['GET', 'POST'])
def admin_login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if username == ADMIN_USERNAME and password == ADMIN_PASSWORD:
            session['admin_logged_in'] = True
            return redirect(url_for('admin_dashboard'))
        else:
            return "Invalid credentials", 401
    return render_template('admin_login.html')

# Admin Dashboard Route
@app.route('/admin')
def admin_dashboard():
    if not session.get('admin_logged_in'):
        return redirect(url_for('admin_login'))
    response = supabase.table('products').select('*').execute()
    products = response.data
    return render_template('admin_dashboard.html', products=products)

# Add Product Route
@app.route('/admin/add', methods=['GET', 'POST'])
def add_product():
    if not session.get('admin_logged_in'):
        return redirect(url_for('admin_login'))
    if request.method == 'POST':
        name = request.form['name']
        price = request.form['price']
        details = request.form['details']
        image_link = request.form['image_link']
        whatsapp_link = request.form['whatsapp_link']
        supabase.table('products').insert({
            'name': name,
            'price': price,
            'details': details,
            'image_link': image_link,
            'whatsapp_link': whatsapp_link
        }).execute()
        return redirect(url_for('admin_dashboard'))
    return render_template('add_product.html')

# Edit Product Route
@app.route('/admin/edit/<int:product_id>', methods=['GET', 'POST'])
def edit_product(product_id):
    if not session.get('admin_logged_in'):
        return redirect(url_for('admin_login'))
    if request.method == 'POST':
        name = request.form['name']
        price = request.form['price']
        details = request.form['details']
        image_link = request.form['image_link']
        whatsapp_link = request.form['whatsapp_link']
        supabase.table('products').update({
            'name': name,
            'price': price,
            'details': details,
            'image_link': image_link,
            'whatsapp_link': whatsapp_link
        }).eq('id', product_id).execute()
        return redirect(url_for('admin_dashboard'))
    response = supabase.table('products').select('*').eq('id', product_id).execute()
    if response.data:
        product = response.data[0]
        return render_template('edit_product.html', product=product)
    else:
        return "Product not found", 404

# Delete Product Route
@app.route('/admin/delete/<int:product_id>', methods=['POST'])
def delete_product(product_id):
    if not session.get('admin_logged_in'):
        return redirect(url_for('admin_login'))
    supabase.table('products').delete().eq('id', product_id).execute()
    return redirect(url_for('admin_dashboard'))

# Admin Logout Route
@app.route('/admin/logout')
def admin_logout():
    session.pop('admin_logged_in', None)
    return redirect(url_for('admin_login'))

# Main function
if __name__ == '__main__':
    app.run(debug=True)