51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from datetime import datetime
|
|
|
|
from .database import Base
|
|
|
|
class Provider(Base):
|
|
__tablename__ = "providers"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
name = Column(String, unique=True, index=True, nullable=False)
|
|
photo_url = Column(String, nullable=True)
|
|
# Remove hourly_rate; pricing is per-service now
|
|
# hourly_rate = Column(Float, nullable=False)
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|
|
|
|
visits = relationship("Visit", back_populates="provider")
|
|
services = relationship("Service", back_populates="provider", cascade="all, delete-orphan")
|
|
|
|
class Client(Base):
|
|
__tablename__ = "clients"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
name = Column(String, unique=True, index=True, nullable=False)
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|
|
|
|
visits = relationship("Visit", back_populates="client")
|
|
|
|
class Service(Base):
|
|
__tablename__ = "services"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
provider_id = Column(Integer, ForeignKey("providers.id"), nullable=False)
|
|
name = Column(String, nullable=False)
|
|
price = Column(Float, nullable=False)
|
|
duration_minutes = Column(Integer, nullable=True)
|
|
|
|
provider = relationship("Provider", back_populates="services")
|
|
|
|
class Visit(Base):
|
|
__tablename__ = "visits"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
provider_id = Column(Integer, ForeignKey("providers.id"), nullable=False)
|
|
client_id = Column(Integer, ForeignKey("clients.id"), nullable=False)
|
|
start_time = Column(DateTime, default=datetime.utcnow)
|
|
duration_minutes = Column(Integer, nullable=False)
|
|
provider = relationship("Provider", back_populates="visits")
|
|
client = relationship("Client", back_populates="visits")
|
|
|