ambik-client / app.py
crw-dev's picture
Upload 10 files
9249145 verified
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)