Spaces:
Runtime error
Runtime error
| """ | |
| Standby Support System Models | |
| Additional models for automated standby support functionality | |
| """ | |
| from sqlalchemy import Column, Integer, String, Text, DateTime, Boolean, ForeignKey, Time | |
| from sqlalchemy.orm import relationship | |
| from sqlalchemy.sql import func | |
| from database import Base | |
| class StandbyQueue(Base): | |
| """Standby queue for service providers with free slots""" | |
| __tablename__ = "standby_queue" | |
| id = Column(Integer, primary_key=True, index=True) | |
| provider_id = Column(Integer, ForeignKey("service_providers.id"), nullable=False) | |
| service_id = Column(Integer, ForeignKey("services.id"), nullable=True) # Optional: specific service | |
| slot_date = Column(DateTime(timezone=True), nullable=False) # Date/time of free slot | |
| slot_start_time = Column(Time, nullable=True) # Start time of slot | |
| slot_end_time = Column(Time, nullable=True) # End time of slot | |
| added_at = Column(DateTime(timezone=True), server_default=func.now()) | |
| expires_at = Column(DateTime(timezone=True), nullable=False) # 5 days from added_at | |
| is_active = Column(Boolean, default=True) # Active in queue | |
| notified_provider = Column(Boolean, default=False) # Whether provider was notified | |
| provider = relationship("ServiceProvider") | |
| service = relationship("Service") | |
| class StandbyNotification(Base): | |
| """Notifications for providers about being added to standby""" | |
| __tablename__ = "standby_notifications" | |
| id = Column(Integer, primary_key=True, index=True) | |
| provider_id = Column(Integer, ForeignKey("service_providers.id"), nullable=False) | |
| standby_queue_id = Column(Integer, ForeignKey("standby_queue.id"), nullable=True) | |
| message = Column(Text, nullable=False) | |
| days_shown = Column(Integer, default=5) # Days to show (up to 5) | |
| shown_until = Column(DateTime(timezone=True), nullable=False) # When to stop showing | |
| is_read = Column(Boolean, default=False) | |
| created_at = Column(DateTime(timezone=True), server_default=func.now()) | |
| provider = relationship("ServiceProvider") | |
| class StandbyRequest(Base): | |
| """Customer requests for standby support after booking cancellation""" | |
| __tablename__ = "standby_requests" | |
| id = Column(Integer, primary_key=True, index=True) | |
| customer_id = Column(Integer, ForeignKey("customers.id"), nullable=False) | |
| cancelled_booking_id = Column(Integer, ForeignKey("bookings.id"), nullable=False) | |
| original_booking_date = Column(DateTime(timezone=True), nullable=False) | |
| original_service_id = Column(Integer, ForeignKey("services.id"), nullable=False) | |
| status = Column(String, default="pending") # pending, matched, completed, expired | |
| created_at = Column(DateTime(timezone=True), server_default=func.now()) | |
| matched_provider_id = Column(Integer, ForeignKey("service_providers.id"), nullable=True) | |
| matched_at = Column(DateTime(timezone=True), nullable=True) | |
| customer = relationship("Customer") | |
| cancelled_booking = relationship("Booking", foreign_keys=[cancelled_booking_id]) | |
| original_service = relationship("Service", foreign_keys=[original_service_id]) | |
| matched_provider = relationship("ServiceProvider", foreign_keys=[matched_provider_id]) | |