v1.3.0 — pannello admin completo, auth localStorage, Baileys WA, customers, calendario, paginazione, dashboard 7gg
This commit is contained in:
71
app/models.py
Normal file
71
app/models.py
Normal file
@@ -0,0 +1,71 @@
|
||||
from sqlalchemy import Column, Integer, String, Boolean, Text, DateTime, ForeignKey, UniqueConstraint
|
||||
from sqlalchemy.dialects.postgresql import JSONB
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import func
|
||||
from app.database import Base
|
||||
|
||||
|
||||
class Service(Base):
|
||||
__tablename__ = "services"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(Text, nullable=False)
|
||||
slug = Column(Text, nullable=False, unique=True)
|
||||
duration_min = Column(Integer, nullable=False, default=15)
|
||||
description = Column(Text)
|
||||
category = Column(Text, default="generale")
|
||||
active = Column(Boolean, default=True)
|
||||
sort_order = Column(Integer, default=0)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
provider_services = relationship("ProviderService", back_populates="service")
|
||||
bookings = relationship("Booking", back_populates="service")
|
||||
|
||||
|
||||
class Provider(Base):
|
||||
__tablename__ = "providers"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(Text, nullable=False)
|
||||
email = Column(Text)
|
||||
phone = Column(Text)
|
||||
google_calendar_id = Column(Text)
|
||||
active = Column(Boolean, default=True)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
provider_services = relationship("ProviderService", back_populates="provider")
|
||||
bookings = relationship("Booking", back_populates="provider")
|
||||
|
||||
|
||||
class ProviderService(Base):
|
||||
__tablename__ = "provider_services"
|
||||
__table_args__ = (UniqueConstraint("provider_id", "service_id"),)
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
provider_id = Column(Integer, ForeignKey("providers.id", ondelete="CASCADE"))
|
||||
service_id = Column(Integer, ForeignKey("services.id", ondelete="CASCADE"))
|
||||
availability_rules = Column(JSONB, nullable=False, default=[])
|
||||
|
||||
provider = relationship("Provider", back_populates="provider_services")
|
||||
service = relationship("Service", back_populates="provider_services")
|
||||
|
||||
|
||||
class Booking(Base):
|
||||
__tablename__ = "bookings"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
service_id = Column(Integer, ForeignKey("services.id"))
|
||||
provider_id = Column(Integer, ForeignKey("providers.id"))
|
||||
customer_name = Column(Text, nullable=False)
|
||||
customer_phone = Column(Text, nullable=False)
|
||||
customer_email = Column(Text)
|
||||
start_at = Column(DateTime(timezone=True), nullable=False)
|
||||
end_at = Column(DateTime(timezone=True), nullable=False)
|
||||
status = Column(Text, default="confirmed")
|
||||
google_event_id = Column(Text)
|
||||
notes = Column(Text)
|
||||
reminder_sent = Column(Boolean, default=False)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
service = relationship("Service", back_populates="bookings")
|
||||
provider = relationship("Provider", back_populates="bookings")
|
||||
Reference in New Issue
Block a user