admin_portal / admin_portal.py
LouaiZahran's picture
Upload folder using huggingface_hub
ef0081c verified
raw
history blame
4.3 kB
import gradio as gr
import psycopg2
import pandas as pd
DB_CONNECTION_STRING = "postgresql://aws-0-eu-central-1.pooler.supabase.com:6543/postgres"
DB_USER = "postgres.fokjwzocbnlqjeifhrop"
DB_PASSWORD = "72hj9eKQw5GBMHPn"
# Connect to the PostgreSQL database
def connect_db():
try:
conn = psycopg2.connect(
dbname="postgres",
user=DB_USER,
password=DB_PASSWORD,
host=DB_CONNECTION_STRING.split("//")[1].split(":")[0],
port=DB_CONNECTION_STRING.split(":")[-1].split("/")[0]
)
return conn
except Exception as e:
print("Error connecting to database:", e)
return None
# Function to create HTML clickable links
def make_clickable_wallet_number(df):
df['wallet_number'] = df['wallet_number'].apply(
lambda x: f'<a href="#" onclick="navigator.clipboard.writeText(\'{x}\'); alert(\'Copied: {x}\')">{x}</a>'
)
return gr.Dataframe(value=df, interactive=False, datatype="html")
# Function to retrieve withdrawal requests
def get_withdrawal_requests(filter_status=None):
conn = connect_db()
if conn is None:
return pd.DataFrame()
query = """
SELECT wr.request_id, wr.username, wr.amount, wr.status, wr.created_at, wr.completed_at, uw.wallet_number
FROM withdrawal_requests wr
JOIN user_wallet uw ON wr.wallet_id = uw.id
"""
if filter_status == "completed":
query += " WHERE wr.status = 'completed'"
elif filter_status == "incomplete":
query += " WHERE wr.status = 'incomplete'"
df = pd.read_sql(query, conn)
conn.close()
return df
# Function to update the status of selected requests
def update_request_status(selected_ids, new_status):
conn = connect_db()
if conn is None:
return "Error: Could not connect to the database."
try:
with conn.cursor() as cursor:
completed_at_fn = "NOW()" if new_status == "completed" else "NULL"
update_query = f"""
UPDATE withdrawal_requests
SET status = %s, completed_at = {completed_at_fn} WHERE request_id = ANY(%s)
"""
cursor.execute(update_query, (new_status, "{" + selected_ids + "}"))
conn.commit()
return f"Updated {len(selected_ids.split(","))} requests to {new_status}."
except Exception as e:
conn.rollback()
return f"Error: {e}"
finally:
conn.close()
# Gradio interface functions
def view_requests(filter_option):
status_filter = None
if filter_option == "Completed Requests":
status_filter = "completed"
elif filter_option == "Incomplete Requests":
status_filter = "incomplete"
df = get_withdrawal_requests(filter_status=status_filter)
df = make_clickable_wallet_number(df)
return df
def change_status(selected_ids, new_status):
message = update_request_status(selected_ids, new_status)
return message
# Gradio UI
with gr.Blocks() as app:
gr.Markdown("# Withdrawal Requests Management")
filter_option = gr.Radio(
choices=["All Requests", "Completed Requests", "Incomplete Requests"],
label="Filter Requests",
value="All Requests"
)
requests_table = gr.Dataframe(
label="Withdrawal Requests",
interactive=True
)
refresh_button = gr.Button("Refresh")
refresh_button.click(
view_requests, inputs=filter_option, outputs=requests_table
)
selected_ids = gr.Textbox(label="Selected Request IDs (comma-separated)", interactive=True)
current_status = gr.Radio(
choices=["incomplete", "completed"],
label="Set Selected Requests to",
value="incomplete"
)
update_button = gr.Button("Update Status")
# Add a Textbox to display the status message
status_message = gr.Textbox(label="Status Message", interactive=False)
# Updated button click with the correct output
update_button.click(
change_status, inputs=[selected_ids, current_status], outputs=status_message
)
# Initial load
requests_table.value = view_requests("All Requests")
# Run the app
app.launch(share=True)