From 1103ecaa6f506eb6cd114c64fd99f2ec4a725455 Mon Sep 17 00:00:00 2001 From: Ernest Litvinenko Date: Wed, 10 Jan 2024 22:13:07 +1000 Subject: [PATCH] start initial backend integration --- core/api/event/__init__.py | 0 core/api/notification/__init__.py | 0 core/api/subtask/__init__.py | 0 core/api/task/__init__.py | 0 core/models/event/__init__.py | 0 core/models/event/db.py | 10 ++++++++++ core/models/event_task/__init__.py | 0 core/models/event_task/db.py | 11 +++++++++++ core/models/notification/__init__.py | 0 core/models/notification/db.py | 14 ++++++++++++++ core/models/profile/__init__.py | 0 core/models/profile/db.py | 8 ++++++++ core/models/subtask/__init__.py | 0 core/models/subtask/db.py | 19 +++++++++++++++++++ core/models/task/__init__.py | 0 core/models/task/db.py | 17 +++++++++++++++++ docker-compose.yml | 9 +++++++++ 17 files changed, 88 insertions(+) create mode 100644 core/api/event/__init__.py create mode 100644 core/api/notification/__init__.py create mode 100644 core/api/subtask/__init__.py create mode 100644 core/api/task/__init__.py create mode 100644 core/models/event/__init__.py create mode 100644 core/models/event/db.py create mode 100644 core/models/event_task/__init__.py create mode 100644 core/models/event_task/db.py create mode 100644 core/models/notification/__init__.py create mode 100644 core/models/notification/db.py create mode 100644 core/models/profile/__init__.py create mode 100644 core/models/profile/db.py create mode 100644 core/models/subtask/__init__.py create mode 100644 core/models/subtask/db.py create mode 100644 core/models/task/__init__.py create mode 100644 core/models/task/db.py create mode 100644 docker-compose.yml 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