Fred808 commited on
Commit
d2b4fad
·
verified ·
1 Parent(s): a8bee6c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -32
app.py CHANGED
@@ -68,17 +68,20 @@ class ChatHistory(Base):
68
 
69
  class Order(Base):
70
  __tablename__ = "orders"
71
- order_id = Column(String(36), primary_key=True, index=True)
72
- user_id = Column(String(36), index=True)
73
- status = Column(String(20), default="pending")
74
- payment_reference = Column(String(100), nullable=True)
75
- last_location = Column(Text, nullable=True) # Stored as a JSON string
 
 
 
 
 
 
 
 
76
 
77
- # New fields for delivery details:
78
- package_description = Column(Text, nullable=False)
79
- pickup_address = Column(Text, nullable=False)
80
- delivery_address = Column(Text, nullable=False)
81
- contact_number = Column(String(20), nullable=False)
82
 
83
  class OrderTracking(Base):
84
  __tablename__ = "order_tracking"
@@ -544,36 +547,38 @@ async def send_proactive_update(user_id: str, update_type: str):
544
  async def create_delivery_order(order_req: DeliveryOrderRequest):
545
  async with async_session() as session:
546
  try:
547
- # Generate a unique order ID using UUID
548
- order_id = str(uuid.uuid4())
 
 
549
  new_order = Order(
550
  order_id=order_id,
551
  user_id=order_req.user_id,
552
  status="pending",
553
- package_description=order_req.package_description,
554
- pickup_address=order_req.pickup_address,
555
- delivery_address=order_req.delivery_address,
556
- contact_number=order_req.contact_number,
 
 
557
  )
 
 
558
  session.add(new_order)
559
  await session.commit()
560
- await session.refresh(new_order)
561
-
562
- # Calculate the total amount (update this logic as needed)
563
- # For example, you might calculate the amount based on package details or add a fixed delivery fee
564
- total_amount = 10000 # Amount in kobo (₦100.00); replace with actual logic
565
 
566
- # Retrieve user's email - use a default if not provided
 
 
 
567
  email = getattr(order_req, "email", "[email protected]")
568
-
569
- # Initialize the payment with Paystack
570
  payment_data = create_paystack_payment_link(email, total_amount, order_id)
571
-
572
- # Optional: Notify management of the new order (using a WhatsApp API call or similar)
573
  if payment_data.get("status"):
574
  payment_link = payment_data["data"]["authorization_url"]
575
- # You could also schedule a background task to notify management
576
- # e.g., asyncio.create_task(send_whatsapp_message(MANAGEMENT_WHATSAPP_NUMBER, f"New order {order_id} created."))
577
  return {
578
  "delivery_id": new_order.order_id,
579
  "payment_link": payment_link,
@@ -582,13 +587,15 @@ async def create_delivery_order(order_req: DeliveryOrderRequest):
582
  else:
583
  return {
584
  "delivery_id": new_order.order_id,
585
- "message": "Order created, but we could not initialize payment. Please try again later."
586
  }
 
587
  except SQLAlchemyError as e:
588
  await session.rollback()
589
- raise HTTPException(status_code=500, detail="Error creating delivery order.") from e
590
-
591
-
 
592
  # --------------------
593
  # ERROR HANDLING
594
  # --------------------
 
68
 
69
  class Order(Base):
70
  __tablename__ = "orders"
71
+ id = Column(Integer, primary_key=True, index=True)
72
+ order_id = Column(String, unique=True, index=True)
73
+ user_id = Column(String, index=True)
74
+ dish = Column(String, nullable=True)
75
+ quantity = Column(String, nullable=True)
76
+ price = Column(String, default="0")
77
+ status = Column(String, default="Pending Payment")
78
+ payment_reference = Column(String, nullable=True)
79
+ delivery_address = Column(String, default="")
80
+ timestamp = Column(DateTime, default=datetime.utcnow)
81
+ pickup_address = Column(String, nullable=True) # <-- Add this
82
+ last_location = Column(String, nullable=True) # <-- Add this
83
+ contact_number = Column(String, nullable=True) # <-- Add this
84
 
 
 
 
 
 
85
 
86
  class OrderTracking(Base):
87
  __tablename__ = "order_tracking"
 
547
  async def create_delivery_order(order_req: DeliveryOrderRequest):
548
  async with async_session() as session:
549
  try:
550
+ # Generate a unique order ID
551
+ order_id = str(uuid4())
552
+
553
+ # Ensure all fields are properly assigned (avoid NULL errors)
554
  new_order = Order(
555
  order_id=order_id,
556
  user_id=order_req.user_id,
557
  status="pending",
558
+ payment_reference=None, # Ensure it is explicitly set
559
+ last_location=None, # Ensure it is explicitly set
560
+ package_description=order_req.package_description or "Food package",
561
+ pickup_address=order_req.pickup_address or "Unknown Pickup Address",
562
+ delivery_address=order_req.delivery_address or "Unknown Delivery Address",
563
+ contact_number=order_req.contact_number or "Unknown Contact Number",
564
  )
565
+
566
+ # Add order to the database
567
  session.add(new_order)
568
  await session.commit()
569
+ await session.refresh(new_order) # Refresh object to ensure DB commit
 
 
 
 
570
 
571
+ # Calculate the total amount (update logic as needed)
572
+ total_amount = 10000 # Amount in kobo (₦100.00); update this as required
573
+
574
+ # Retrieve user's email (use a default if not provided)
575
  email = getattr(order_req, "email", "[email protected]")
576
+
577
+ # Initialize payment with Paystack
578
  payment_data = create_paystack_payment_link(email, total_amount, order_id)
579
+
 
580
  if payment_data.get("status"):
581
  payment_link = payment_data["data"]["authorization_url"]
 
 
582
  return {
583
  "delivery_id": new_order.order_id,
584
  "payment_link": payment_link,
 
587
  else:
588
  return {
589
  "delivery_id": new_order.order_id,
590
+ "message": "Order created, but payment initialization failed. Please try again later."
591
  }
592
+
593
  except SQLAlchemyError as e:
594
  await session.rollback()
595
+ raise HTTPException(status_code=500, detail=f"Database error: {str(e)}") from e
596
+ except Exception as e:
597
+ await session.rollback()
598
+ raise HTTPException(status_code=500, detail=f"Unexpected error: {str(e)}") from e
599
  # --------------------
600
  # ERROR HANDLING
601
  # --------------------