diff --git a/core/api/event/__init__.py b/core/api/event/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/api/notification/__init__.py b/core/api/notification/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/api/subtask/__init__.py b/core/api/subtask/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/api/task/__init__.py b/core/api/task/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/models/event/__init__.py b/core/models/event/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/models/event/db.py b/core/models/event/db.py new file mode 100644 index 0000000..fda03a6 --- /dev/null +++ b/core/models/event/db.py @@ -0,0 +1,10 @@ +from sqlalchemy.orm import Mapped, mapped_column +from sqlalchemy import String + +from database import Base + + +class Event(Base): + __tablename__ = 'event' + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) + title: Mapped[str] = mapped_column(String(128), nullable=False) diff --git a/core/models/event_task/__init__.py b/core/models/event_task/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/models/event_task/db.py b/core/models/event_task/db.py new file mode 100644 index 0000000..b2bf2b3 --- /dev/null +++ b/core/models/event_task/db.py @@ -0,0 +1,11 @@ +from sqlalchemy.orm import Mapped, mapped_column +from sqlalchemy import ForeignKey + +from database import Base + + +class EventTask(Base): + __tablename__ = 'event_task' + event_id: Mapped[int] = mapped_column(ForeignKey('event.id'), nullable=False, primary_key=True) + task_id: Mapped[int] = mapped_column(ForeignKey('task.id'), nullable=False, primary_key=True) + is_completed: Mapped[bool] = mapped_column(nullable=False, default=False) diff --git a/core/models/notification/__init__.py b/core/models/notification/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/models/notification/db.py b/core/models/notification/db.py new file mode 100644 index 0000000..a7ea38c --- /dev/null +++ b/core/models/notification/db.py @@ -0,0 +1,14 @@ +from sqlalchemy.orm import Mapped, mapped_column +from sqlalchemy import ForeignKey, String + +from database import Base + + +class Notification(Base): + __tablename__ = 'notification' + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) + title: Mapped[str] = mapped_column(String(128), nullable=False) + description: Mapped[str | None] = mapped_column(String(128)) + profile_id: Mapped[int] = mapped_column(ForeignKey('profile.id'), nullable=False) + is_recited: Mapped[bool] = mapped_column(nullable=False, default=False) + diff --git a/core/models/profile/__init__.py b/core/models/profile/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/models/profile/db.py b/core/models/profile/db.py new file mode 100644 index 0000000..4f3a661 --- /dev/null +++ b/core/models/profile/db.py @@ -0,0 +1,8 @@ +from sqlalchemy.orm import Mapped, mapped_column +from database import Base + + +class Profile(Base): + __tablename__ = 'profile' + id: Mapped[int] = mapped_column(nullable=False, primary_key=True) + diff --git a/core/models/subtask/__init__.py b/core/models/subtask/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/models/subtask/db.py b/core/models/subtask/db.py new file mode 100644 index 0000000..0f6f196 --- /dev/null +++ b/core/models/subtask/db.py @@ -0,0 +1,19 @@ +from datetime import datetime, timedelta + +from sqlalchemy.orm import Mapped, mapped_column +from sqlalchemy import ForeignKey, String + +from database import Base + + +class SubTask(Base): + __tablename__ = 'subtask' + id: Mapped[int] = mapped_column(nullable=False, primary_key=True) + task_id: Mapped[int] = mapped_column(ForeignKey('task.id'), nullable=False) + title: Mapped[str] = mapped_column(String(128), nullable=False) + description: Mapped[str | None] = mapped_column(String(128)) + status: Mapped[str] = mapped_column(String(128), default='active', nullable=False) + time_till: Mapped[datetime] = mapped_column(nullable=False, default=lambda _: datetime.utcnow() + timedelta(days=1)) + time_finished: Mapped[datetime] = mapped_column(nullable=True) + lon: Mapped[str | None] = mapped_column(String(128)) + lat: Mapped[str | None] = mapped_column(String(128)) diff --git a/core/models/task/__init__.py b/core/models/task/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/models/task/db.py b/core/models/task/db.py new file mode 100644 index 0000000..a8363cd --- /dev/null +++ b/core/models/task/db.py @@ -0,0 +1,17 @@ +from datetime import datetime, timedelta + +from sqlalchemy.orm import Mapped, mapped_column +from sqlalchemy import ForeignKey, String + +from database import Base + + +class Task(Base): + __tablename__ = 'task' + id: Mapped[int] = mapped_column(nullable=False, primary_key=True) + title: Mapped[str] = mapped_column(String(128), nullable=False) + description: Mapped[str | None] = mapped_column(String(128)) + status: Mapped[str] = mapped_column(String(128), default='active', nullable=False) + time_till: Mapped[datetime] = mapped_column(nullable=False, default=lambda _: datetime.utcnow() + timedelta(days=1)) + time_finished: Mapped[datetime] = mapped_column(nullable=True) + profile_id: Mapped[int] = mapped_column(ForeignKey('profile.id'), nullable=False) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f2685a0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,9 @@ +services: + db: + image: postgres + ports: + - "5432:5432" + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres + - POSTGRES_DB=transporter \ No newline at end of file