Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -68,17 +68,20 @@ class ChatHistory(Base):
|
|
68 |
|
69 |
class Order(Base):
|
70 |
__tablename__ = "orders"
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
548 |
-
order_id = str(
|
|
|
|
|
549 |
new_order = Order(
|
550 |
order_id=order_id,
|
551 |
user_id=order_req.user_id,
|
552 |
status="pending",
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
|
|
|
|
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 |
-
#
|
|
|
|
|
|
|
567 |
email = getattr(order_req, "email", "[email protected]")
|
568 |
-
|
569 |
-
# Initialize
|
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
|
586 |
}
|
|
|
587 |
except SQLAlchemyError as e:
|
588 |
await session.rollback()
|
589 |
-
raise HTTPException(status_code=500, detail="
|
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 |
# --------------------
|