Fred808 commited on
Commit
8ff403d
·
verified ·
1 Parent(s): e20721a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -5
app.py CHANGED
@@ -242,6 +242,38 @@ async def get_order_details(order_id: str) -> Optional[Order]:
242
  )
243
  return result.scalar_one_or_none()
244
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  def calculate_eta(last_location: dict) -> str:
246
  # Implement actual ETA calculation logic here.
247
  return "30 minutes"
@@ -269,7 +301,7 @@ async def on_startup():
269
  logger = logging.getLogger(__name__)
270
 
271
  @app.post("/delivery")
272
- async def create_delivery_order(order_req: DeliveryOrderRequest):
273
  try:
274
  logger.info(f"Received order request: {order_req}")
275
 
@@ -277,7 +309,7 @@ async def create_delivery_order(order_req: DeliveryOrderRequest):
277
  order_id = f"DEL-{random.randint(100000000, 999999999)}"
278
  logger.info(f"Generated order ID: {order_id}")
279
 
280
- # Extract delivery location
281
  delivery_address = order_req.delivery_address.lower()
282
  shipping_cost = TOWN_SHIPPING_COSTS.get("default", 1000)
283
  for town, cost in TOWN_SHIPPING_COSTS.items():
@@ -286,7 +318,7 @@ async def create_delivery_order(order_req: DeliveryOrderRequest):
286
  break
287
  logger.info(f"Calculated shipping cost: ₦{shipping_cost}")
288
 
289
- # Set item price (adjustable as needed)
290
  item_price = 5000
291
  total_amount = item_price + shipping_cost
292
  total_amount_kobo = total_amount * 100 # Convert to kobo
@@ -299,6 +331,16 @@ async def create_delivery_order(order_req: DeliveryOrderRequest):
299
  payment_data = create_paystack_payment_link(email, total_amount_kobo, order_id)
300
  logger.info(f"Generated payment data: {payment_data}")
301
 
 
 
 
 
 
 
 
 
 
 
302
  if payment_data.get("status"):
303
  payment_link = payment_data["data"]["authorization_url"]
304
  return {
@@ -306,7 +348,7 @@ async def create_delivery_order(order_req: DeliveryOrderRequest):
306
  "total_amount": f"₦{total_amount}",
307
  "shipping_cost": f"₦{shipping_cost}",
308
  "payment_link": payment_link,
309
- "message": "Order created successfully. Please complete payment using the link provided."
310
  }
311
  else:
312
  logger.error(f"Failed to generate payment link for order {order_id}")
@@ -314,13 +356,14 @@ async def create_delivery_order(order_req: DeliveryOrderRequest):
314
  "order_id": order_id,
315
  "total_amount": f"₦{total_amount}",
316
  "shipping_cost": f"₦{shipping_cost}",
317
- "message": "Order created, but payment initialization failed. Please try again later."
318
  }
319
 
320
  except Exception as e:
321
  logger.error(f"Error creating delivery order: {e}", exc_info=True)
322
  raise HTTPException(status_code=500, detail=f"Error: {str(e)}")
323
 
 
324
  @app.post("/chatbot")
325
  async def enhanced_chatbot_handler(request: Request, bg: BackgroundTasks):
326
  data = await request.json()
 
242
  )
243
  return result.scalar_one_or_none()
244
 
245
+ def send_email_notification(order_details):
246
+ # Build the email payload based on the delivery request details.
247
+ payload = {
248
+ "from": "[email protected]",
249
250
+ "subject": f"New Delivery Request Received: {order_details['order_id']}",
251
+ "body": (
252
+ f"New Delivery Request Received:\n"
253
+ f"Order ID: {order_details['order_id']}\n"
254
+ f"Package Description: {order_details.get('package_description', 'Not Provided')}\n"
255
+ f"Pickup Address: {order_details.get('pickup_address', 'Not Provided')}\n"
256
+ f"Delivery Address: {order_details.get('delivery_address', 'Not Provided')}\n"
257
+ f"Contact Number: {order_details.get('contact_number', 'Not Provided')}\n"
258
+ f"Status: Pending Payment"
259
+ ),
260
+ "smtpHost": "smtp.gmail.com",
261
+ "smtpPort": 587,
262
+ "smtpSecure": "false",
263
+ "smtpUser": "[email protected]",
264
+ "smtpPassword": "uddvxabxotlvfewk",
265
+ }
266
+
267
+ url = "https://smtp-server-ten.vercel.app/smtp" # Adjust to your SMTP API endpoint.
268
+ try:
269
+ response = requests.post(url, json=payload, timeout=10)
270
+ response.raise_for_status()
271
+ return response.json()
272
+ except Exception as e:
273
+ print(f"Error sending email: {e}")
274
+ return None
275
+
276
+
277
  def calculate_eta(last_location: dict) -> str:
278
  # Implement actual ETA calculation logic here.
279
  return "30 minutes"
 
301
  logger = logging.getLogger(__name__)
302
 
303
  @app.post("/delivery")
304
+ async def create_delivery_order(order_req: DeliveryOrderRequest, bg: BackgroundTasks):
305
  try:
306
  logger.info(f"Received order request: {order_req}")
307
 
 
309
  order_id = f"DEL-{random.randint(100000000, 999999999)}"
310
  logger.info(f"Generated order ID: {order_id}")
311
 
312
+ # Extract delivery location and calculate shipping cost.
313
  delivery_address = order_req.delivery_address.lower()
314
  shipping_cost = TOWN_SHIPPING_COSTS.get("default", 1000)
315
  for town, cost in TOWN_SHIPPING_COSTS.items():
 
318
  break
319
  logger.info(f"Calculated shipping cost: ₦{shipping_cost}")
320
 
321
+ # Set item price (adjustable as needed) and calculate total.
322
  item_price = 5000
323
  total_amount = item_price + shipping_cost
324
  total_amount_kobo = total_amount * 100 # Convert to kobo
 
331
  payment_data = create_paystack_payment_link(email, total_amount_kobo, order_id)
332
  logger.info(f"Generated payment data: {payment_data}")
333
 
334
+ # Notify admin via email in the background
335
+ email_details = {
336
+ "order_id": order_id,
337
+ "package_description": order_req.package_description,
338
+ "pickup_address": order_req.pickup_address,
339
+ "delivery_address": order_req.delivery_address,
340
+ "contact_number": order_req.contact_number,
341
+ }
342
+ bg.add_task(send_email_notification, email_details)
343
+
344
  if payment_data.get("status"):
345
  payment_link = payment_data["data"]["authorization_url"]
346
  return {
 
348
  "total_amount": f"₦{total_amount}",
349
  "shipping_cost": f"₦{shipping_cost}",
350
  "payment_link": payment_link,
351
+ "message": "Delivery request created successfully. Please complete payment using the link provided."
352
  }
353
  else:
354
  logger.error(f"Failed to generate payment link for order {order_id}")
 
356
  "order_id": order_id,
357
  "total_amount": f"₦{total_amount}",
358
  "shipping_cost": f"₦{shipping_cost}",
359
+ "message": "Delivery request created, but payment initialization failed. Please try again later."
360
  }
361
 
362
  except Exception as e:
363
  logger.error(f"Error creating delivery order: {e}", exc_info=True)
364
  raise HTTPException(status_code=500, detail=f"Error: {str(e)}")
365
 
366
+
367
  @app.post("/chatbot")
368
  async def enhanced_chatbot_handler(request: Request, bg: BackgroundTasks):
369
  data = await request.json()