Spaces:
Sleeping
Sleeping
Upload folder using huggingface_hub
Browse files- admin_portal.py +220 -31
admin_portal.py
CHANGED
@@ -63,7 +63,7 @@ def update_request_status(selected_ids, new_status):
|
|
63 |
"""
|
64 |
cursor.execute(update_query, (new_status, "{" + selected_ids + "}"))
|
65 |
conn.commit()
|
66 |
-
return f"Updated {len(selected_ids.split(
|
67 |
except Exception as e:
|
68 |
conn.rollback()
|
69 |
return f"Error: {e}"
|
@@ -86,45 +86,234 @@ def change_status(selected_ids, new_status):
|
|
86 |
message = update_request_status(selected_ids, new_status)
|
87 |
return message
|
88 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
# Gradio UI
|
90 |
with gr.Blocks() as app:
|
91 |
-
gr.
|
|
|
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 |
-
status_message = gr.Textbox(label="Status Message", interactive=False)
|
119 |
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
|
126 |
-
|
127 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
|
129 |
# Run the app
|
130 |
-
app.launch(
|
|
|
63 |
"""
|
64 |
cursor.execute(update_query, (new_status, "{" + selected_ids + "}"))
|
65 |
conn.commit()
|
66 |
+
return f"Updated {len(selected_ids.split(","))} requests to {new_status}."
|
67 |
except Exception as e:
|
68 |
conn.rollback()
|
69 |
return f"Error: {e}"
|
|
|
86 |
message = update_request_status(selected_ids, new_status)
|
87 |
return message
|
88 |
|
89 |
+
# Function to retrieve application configurations
|
90 |
+
def get_configurations():
|
91 |
+
conn = connect_db()
|
92 |
+
if conn is None:
|
93 |
+
return pd.DataFrame({"Error": ["Unable to connect to database"]})
|
94 |
+
|
95 |
+
try:
|
96 |
+
query = "SELECT * FROM config WHERE id = 0"
|
97 |
+
df = pd.read_sql(query, conn)
|
98 |
+
print(df.to_string())
|
99 |
+
conn.close()
|
100 |
+
return df
|
101 |
+
except Exception as e:
|
102 |
+
conn.close()
|
103 |
+
return pd.DataFrame({"Error": [str(e)]})
|
104 |
+
|
105 |
+
# Function to update application configurations
|
106 |
+
def update_configurations(
|
107 |
+
ad_limit_per_day,
|
108 |
+
spin_limit_per_day,
|
109 |
+
ad_reward_steps,
|
110 |
+
steps_limit,
|
111 |
+
amount_limit_for_withdrawal,
|
112 |
+
points_conversion_rate
|
113 |
+
):
|
114 |
+
conn = connect_db()
|
115 |
+
if conn is None:
|
116 |
+
return "Error: Unable to connect to database."
|
117 |
+
|
118 |
+
try:
|
119 |
+
query = """
|
120 |
+
UPDATE config
|
121 |
+
SET
|
122 |
+
ad_limit_per_day = %s,
|
123 |
+
spin_limit_per_day = %s,
|
124 |
+
steps_limit = %s,
|
125 |
+
points_conversion_rate = %s,
|
126 |
+
ad_reward_steps = %s,
|
127 |
+
amount_limit_for_withdrawal = %s
|
128 |
+
WHERE id = 0
|
129 |
+
"""
|
130 |
+
with conn.cursor() as cursor:
|
131 |
+
cursor.execute(query, (
|
132 |
+
ad_limit_per_day,
|
133 |
+
spin_limit_per_day,
|
134 |
+
steps_limit,
|
135 |
+
points_conversion_rate,
|
136 |
+
ad_reward_steps,
|
137 |
+
amount_limit_for_withdrawal
|
138 |
+
))
|
139 |
+
conn.commit()
|
140 |
+
return "Configuration updated successfully."
|
141 |
+
except Exception as e:
|
142 |
+
conn.rollback()
|
143 |
+
return f"Error: {str(e)}"
|
144 |
+
finally:
|
145 |
+
conn.close()
|
146 |
+
|
147 |
+
|
148 |
+
def get_milestones():
|
149 |
+
conn = connect_db()
|
150 |
+
if conn is None:
|
151 |
+
return pd.DataFrame({"Error": ["Unable to connect to database"]})
|
152 |
+
|
153 |
+
try:
|
154 |
+
query = "SELECT * FROM reward_milestone"
|
155 |
+
df = pd.read_sql(query, conn)
|
156 |
+
print(df.to_string())
|
157 |
+
conn.close()
|
158 |
+
return df
|
159 |
+
except Exception as e:
|
160 |
+
conn.close()
|
161 |
+
return pd.DataFrame({"Error": [str(e)]})
|
162 |
+
|
163 |
+
# Function to update application configurations
|
164 |
+
def update_milestones(
|
165 |
+
req1, r1, req2, r2, req3, r3
|
166 |
+
):
|
167 |
+
conn = connect_db()
|
168 |
+
if conn is None:
|
169 |
+
return "Error: Unable to connect to database."
|
170 |
+
|
171 |
+
try:
|
172 |
+
milestones = [(req1, r1), (req2, r2), (req3, r3)]
|
173 |
+
for i, milestone in enumerate(milestones):
|
174 |
+
query = """
|
175 |
+
UPDATE reward_milestone
|
176 |
+
SET
|
177 |
+
required_steps = %s,
|
178 |
+
reward = %s
|
179 |
+
WHERE id = %s
|
180 |
+
"""
|
181 |
+
required_steps, reward = milestone
|
182 |
+
with conn.cursor() as cursor:
|
183 |
+
cursor.execute(query, (
|
184 |
+
required_steps,
|
185 |
+
reward,
|
186 |
+
i
|
187 |
+
))
|
188 |
+
conn.commit()
|
189 |
+
return "Configuration updated successfully."
|
190 |
+
except Exception as e:
|
191 |
+
conn.rollback()
|
192 |
+
return f"Error: {str(e)}"
|
193 |
+
finally:
|
194 |
+
conn.close()
|
195 |
+
|
196 |
# Gradio UI
|
197 |
with gr.Blocks() as app:
|
198 |
+
with gr.Tab("Withdrawal Requests"):
|
199 |
+
gr.Markdown("# Withdrawal Requests Management")
|
200 |
|
201 |
+
filter_option = gr.Radio(
|
202 |
+
choices=["All Requests", "Completed Requests", "Incomplete Requests"],
|
203 |
+
label="Filter Requests",
|
204 |
+
value="All Requests"
|
205 |
+
)
|
206 |
|
207 |
+
requests_table = gr.Dataframe(
|
208 |
+
label="Withdrawal Requests",
|
209 |
+
interactive=True
|
210 |
+
)
|
211 |
|
212 |
+
refresh_button = gr.Button("Refresh")
|
213 |
+
refresh_button.click(
|
214 |
+
view_requests, inputs=filter_option, outputs=requests_table
|
215 |
+
)
|
216 |
|
217 |
+
selected_ids = gr.Textbox(label="Selected Request IDs (comma-separated)", interactive=True)
|
218 |
+
current_status = gr.Radio(
|
219 |
+
choices=["incomplete", "completed"],
|
220 |
+
label="Set Selected Requests to",
|
221 |
+
value="incomplete"
|
222 |
+
)
|
223 |
|
224 |
+
update_button = gr.Button("Update Status")
|
225 |
+
status_message = gr.Textbox(label="Status Message", interactive=False)
|
|
|
226 |
|
227 |
+
update_button.click(
|
228 |
+
change_status, inputs=[selected_ids, current_status], outputs=status_message
|
229 |
+
)
|
230 |
+
|
231 |
+
requests_table.value = view_requests("All Requests")
|
232 |
+
|
233 |
+
with gr.Tab("General Configurations"):
|
234 |
+
gr.Markdown("# Application Configurations")
|
235 |
+
|
236 |
+
# Inputs for configuration fields
|
237 |
+
ad_limit_per_day = gr.Number(label="Ad Limit Per Day", precision=0)
|
238 |
+
spin_limit_per_day = gr.Number(label="Spin Limit Per Day", precision=0)
|
239 |
+
steps_limit = gr.Number(label="Steps Limit", precision=0)
|
240 |
+
points_conversion_rate = gr.Number(label="Points Conversion Rate", precision=0)
|
241 |
+
ad_reward_steps = gr.Number(label="Ad Reward Steps", precision=0)
|
242 |
+
amount_limit_for_withdrawal = gr.Number(label="Amount Limit for Withdrawal", precision=0)
|
243 |
+
|
244 |
+
save_button = gr.Button("Save Configurations")
|
245 |
+
config_message = gr.Textbox(label="Status Message", interactive=False)
|
246 |
+
|
247 |
+
# Button to update configurations
|
248 |
+
save_button.click(
|
249 |
+
update_configurations,
|
250 |
+
inputs=[
|
251 |
+
ad_limit_per_day,
|
252 |
+
spin_limit_per_day,
|
253 |
+
ad_reward_steps,
|
254 |
+
steps_limit,
|
255 |
+
amount_limit_for_withdrawal,
|
256 |
+
points_conversion_rate
|
257 |
+
],
|
258 |
+
outputs=config_message
|
259 |
+
)
|
260 |
+
|
261 |
+
# Load current configurations
|
262 |
+
def load_config():
|
263 |
+
df = get_configurations()
|
264 |
+
if not df.empty:
|
265 |
+
return df.iloc[0, 1:].to_list()
|
266 |
+
return [0] * 6
|
267 |
|
268 |
+
load_button = gr.Button("Load Current Configurations")
|
269 |
+
load_button.click(
|
270 |
+
load_config,
|
271 |
+
outputs=[
|
272 |
+
ad_limit_per_day,
|
273 |
+
spin_limit_per_day,
|
274 |
+
ad_reward_steps,
|
275 |
+
steps_limit,
|
276 |
+
amount_limit_for_withdrawal,
|
277 |
+
points_conversion_rate
|
278 |
+
]
|
279 |
+
)
|
280 |
+
|
281 |
+
with gr.Tab("Milestone Configurations"):
|
282 |
+
gr.Markdown("# Application Configurations")
|
283 |
+
|
284 |
+
# Inputs for configuration fields
|
285 |
+
with gr.Row():
|
286 |
+
req_steps_1 = gr.Number(label="Needed Steps for Milestone 1", precision=0)
|
287 |
+
reward_1 = gr.Number(label="Reward for Milestone 1", precision=0)
|
288 |
+
with gr.Row():
|
289 |
+
req_steps_2 = gr.Number(label="Needed Steps for Milestone 2", precision=0)
|
290 |
+
reward_2 = gr.Number(label="Reward for Milestone 2", precision=0)
|
291 |
+
with gr.Row():
|
292 |
+
req_steps_3 = gr.Number(label="Needed Steps for Milestone 3", precision=0)
|
293 |
+
reward_3 = gr.Number(label="Reward for Milestone 3", precision=0)
|
294 |
+
|
295 |
+
save_button = gr.Button("Save Configurations")
|
296 |
+
config_message = gr.Textbox(label="Status Message", interactive=False)
|
297 |
|
298 |
+
# Button to update configurations
|
299 |
+
save_button.click(
|
300 |
+
update_milestones,
|
301 |
+
inputs=[req_steps_1, reward_1, req_steps_2, reward_2, req_steps_3, reward_3],
|
302 |
+
outputs=config_message
|
303 |
+
)
|
304 |
+
|
305 |
+
# Load current configurations
|
306 |
+
def load_milestones():
|
307 |
+
df = get_milestones()
|
308 |
+
if not df.empty:
|
309 |
+
return df[['required_steps', 'reward']].to_numpy().flatten().tolist()
|
310 |
+
return [0] * 6
|
311 |
+
|
312 |
+
load_button = gr.Button("Load Current Configurations")
|
313 |
+
load_button.click(
|
314 |
+
load_milestones,
|
315 |
+
outputs=[req_steps_1, reward_1, req_steps_2, reward_2, req_steps_3, reward_3],
|
316 |
+
)
|
317 |
|
318 |
# Run the app
|
319 |
+
app.launch()
|