66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from database import Base
|
|
|
|
|
|
class User(Base):
|
|
__tablename__ = "users"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
username = Column(String(50), unique=True, nullable=False)
|
|
email = Column(String(100), unique=True, nullable=True)
|
|
password_hash = Column(String(255), nullable=False)
|
|
is_admin = Column(Boolean, default=False)
|
|
|
|
caldav_accounts = relationship(
|
|
"CalDAVAccount", back_populates="user", cascade="all, delete-orphan"
|
|
)
|
|
settings = relationship(
|
|
"UserSettings", back_populates="user", uselist=False, cascade="all, delete-orphan"
|
|
)
|
|
|
|
|
|
class CalDAVAccount(Base):
|
|
__tablename__ = "caldav_accounts"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
|
|
name = Column(String(100), nullable=False)
|
|
url = Column(String(500), nullable=False)
|
|
username = Column(String(100), nullable=False)
|
|
password = Column(String(255), nullable=False)
|
|
color = Column(String(7), default="#4285f4")
|
|
enabled = Column(Boolean, default=True)
|
|
|
|
user = relationship("User", back_populates="caldav_accounts")
|
|
calendars = relationship(
|
|
"Calendar", back_populates="account", cascade="all, delete-orphan"
|
|
)
|
|
|
|
|
|
class Calendar(Base):
|
|
__tablename__ = "calendars"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
account_id = Column(Integer, ForeignKey("caldav_accounts.id"), nullable=False)
|
|
cal_id = Column(String(500), nullable=False)
|
|
name = Column(String(100), nullable=False)
|
|
color = Column(String(7), nullable=True)
|
|
enabled = Column(Boolean, default=True)
|
|
|
|
account = relationship("CalDAVAccount", back_populates="calendars")
|
|
|
|
|
|
class UserSettings(Base):
|
|
__tablename__ = "user_settings"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
user_id = Column(Integer, ForeignKey("users.id"), unique=True, nullable=False)
|
|
default_view = Column(String(20), default="month")
|
|
primary_color = Column(String(7), default="#4285f4")
|
|
accent_color = Column(String(7), default="#ea4335")
|
|
today_color = Column(String(7), default="#4285f4")
|
|
dim_past_events = Column(Boolean, default=False)
|
|
|
|
user = relationship("User", back_populates="settings")
|