|
|
@@ -13,6 +13,7 @@ alembic revision --autogenerate -m "migration_name"
|
|
|
# apply all migrations
|
|
|
alembic upgrade head
|
|
|
"""
|
|
|
+
|
|
|
from typing import Optional
|
|
|
import uuid
|
|
|
from datetime import datetime
|
|
|
@@ -30,25 +31,33 @@ class Base(DeclarativeBase):
|
|
|
|
|
|
def uid_column() -> Mapped[str]:
|
|
|
"""Returns a postgreSQL UUID column for SQL ORM"""
|
|
|
- return mapped_column(UUID(as_uuid=False), primary_key=True, default=lambda _: str(uuid.uuid4()))
|
|
|
+ return mapped_column(
|
|
|
+ UUID(as_uuid=False), primary_key=True, default=lambda _: str(uuid.uuid4())
|
|
|
+ )
|
|
|
|
|
|
|
|
|
class User(Base):
|
|
|
__tablename__ = "user_model"
|
|
|
|
|
|
id: Mapped[str] = uid_column()
|
|
|
- email: Mapped[str] = mapped_column(String(254), nullable=False, unique=True, index=True)
|
|
|
+ email: Mapped[str] = mapped_column(
|
|
|
+ String(254), nullable=False, unique=True, index=True
|
|
|
+ )
|
|
|
hashed_password: Mapped[str] = mapped_column(String(128), nullable=False)
|
|
|
|
|
|
|
|
|
class Project(Base):
|
|
|
__tablename__ = "projects"
|
|
|
id: Mapped[str] = uid_column()
|
|
|
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
+ created_at: Mapped[datetime] = mapped_column(
|
|
|
+ DateTime(timezone=True), server_default=func.now()
|
|
|
+ )
|
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
|
DateTime(timezone=True), default=datetime.now, onupdate=func.now()
|
|
|
)
|
|
|
- name: Mapped[str] = mapped_column(String(128), nullable=False, unique=True, index=True)
|
|
|
+ name: Mapped[str] = mapped_column(
|
|
|
+ String(128), nullable=False, unique=True, index=True
|
|
|
+ )
|
|
|
is_public: Mapped[bool] = mapped_column(Boolean())
|
|
|
volunteers: Mapped[list["Volunteer"]] = relationship(
|
|
|
back_populates="project", cascade="delete, delete-orphan"
|
|
|
@@ -82,9 +91,13 @@ association_table_volunteer_slot = Table(
|
|
|
class Volunteer(Base):
|
|
|
__tablename__ = "volunteers"
|
|
|
id: Mapped[str] = uid_column()
|
|
|
- project_id: Mapped[str] = mapped_column(ForeignKey("projects.id", ondelete="CASCADE"))
|
|
|
+ project_id: Mapped[str] = mapped_column(
|
|
|
+ ForeignKey("projects.id", ondelete="CASCADE")
|
|
|
+ )
|
|
|
project: Mapped["Project"] = relationship(back_populates="volunteers")
|
|
|
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
+ created_at: Mapped[datetime] = mapped_column(
|
|
|
+ DateTime(timezone=True), server_default=func.now()
|
|
|
+ )
|
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
|
DateTime(timezone=True), default=datetime.now, onupdate=func.now()
|
|
|
)
|
|
|
@@ -106,10 +119,14 @@ class Slot(Base):
|
|
|
__tablename__ = "slots"
|
|
|
|
|
|
id: Mapped[str] = uid_column()
|
|
|
- project_id: Mapped[str] = mapped_column(ForeignKey("projects.id", ondelete="CASCADE"))
|
|
|
+ project_id: Mapped[str] = mapped_column(
|
|
|
+ ForeignKey("projects.id", ondelete="CASCADE")
|
|
|
+ )
|
|
|
project: Mapped["Project"] = relationship(back_populates="slots")
|
|
|
|
|
|
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
+ created_at: Mapped[datetime] = mapped_column(
|
|
|
+ DateTime(timezone=True), server_default=func.now()
|
|
|
+ )
|
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
|
DateTime(timezone=True), default=datetime.now, onupdate=func.now()
|
|
|
)
|
|
|
@@ -124,7 +141,9 @@ class Slot(Base):
|
|
|
secondary=association_table_volunteer_slot, back_populates="slots"
|
|
|
)
|
|
|
|
|
|
- template_id: Mapped[Optional[str]] = mapped_column(ForeignKey("slot_templates.id"))
|
|
|
+ template_id: Mapped[Optional[str]] = mapped_column(
|
|
|
+ ForeignKey("slot_templates.id", ondelete="SET NULL"), nullable=True
|
|
|
+ )
|
|
|
template: Mapped["SlotTemplate"] = relationship(back_populates="slots")
|
|
|
|
|
|
@hybrid_property
|
|
|
@@ -148,10 +167,14 @@ class SlotTag(Base):
|
|
|
__tablename__ = "slot_tags"
|
|
|
|
|
|
id: Mapped[str] = uid_column()
|
|
|
- project_id: Mapped[str] = mapped_column(ForeignKey("projects.id", ondelete="CASCADE"))
|
|
|
+ project_id: Mapped[str] = mapped_column(
|
|
|
+ ForeignKey("projects.id", ondelete="CASCADE")
|
|
|
+ )
|
|
|
project: Mapped["Project"] = relationship(back_populates="tags")
|
|
|
|
|
|
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
+ created_at: Mapped[datetime] = mapped_column(
|
|
|
+ DateTime(timezone=True), server_default=func.now()
|
|
|
+ )
|
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
|
DateTime(timezone=True), default=datetime.now, onupdate=func.now()
|
|
|
)
|
|
|
@@ -170,10 +193,14 @@ class SlotTemplate(Base):
|
|
|
__tablename__ = "slot_templates"
|
|
|
|
|
|
id: Mapped[str] = uid_column()
|
|
|
- project_id: Mapped[str] = mapped_column(ForeignKey("projects.id", ondelete="CASCADE"))
|
|
|
+ project_id: Mapped[str] = mapped_column(
|
|
|
+ ForeignKey("projects.id", ondelete="CASCADE")
|
|
|
+ )
|
|
|
project: Mapped["Project"] = relationship(back_populates="templates")
|
|
|
|
|
|
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
+ created_at: Mapped[datetime] = mapped_column(
|
|
|
+ DateTime(timezone=True), server_default=func.now()
|
|
|
+ )
|
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
|
DateTime(timezone=True), default=datetime.now, onupdate=func.now()
|
|
|
)
|
|
|
@@ -203,15 +230,23 @@ class Sms(Base):
|
|
|
id: Mapped[str] = mapped_column(
|
|
|
UUID(as_uuid=False), primary_key=True, default=lambda _: str(uuid.uuid4())
|
|
|
)
|
|
|
- project_id: Mapped[str] = mapped_column(ForeignKey("projects.id", ondelete="CASCADE"))
|
|
|
+ project_id: Mapped[str] = mapped_column(
|
|
|
+ ForeignKey("projects.id", ondelete="CASCADE")
|
|
|
+ )
|
|
|
project: Mapped["Project"] = relationship(back_populates="sms")
|
|
|
|
|
|
- volunteer_id: Mapped[str] = mapped_column(ForeignKey("volunteers.id"), nullable=True)
|
|
|
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
+ volunteer_id: Mapped[str] = mapped_column(
|
|
|
+ ForeignKey("volunteers.id"), nullable=True
|
|
|
+ )
|
|
|
+ created_at: Mapped[datetime] = mapped_column(
|
|
|
+ DateTime(timezone=True), server_default=func.now()
|
|
|
+ )
|
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
|
DateTime(timezone=True), default=datetime.now, onupdate=func.now()
|
|
|
)
|
|
|
content: Mapped[str] = mapped_column(String(), nullable=False)
|
|
|
phone_number: Mapped[str] = mapped_column(String(24))
|
|
|
- sending_time: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=datetime.now)
|
|
|
+ sending_time: Mapped[datetime] = mapped_column(
|
|
|
+ DateTime(timezone=True), default=datetime.now
|
|
|
+ )
|
|
|
send_time: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=True)
|