X-Git-Url: https://us-delaporte.pagekite.me/gitweb/matrix-goal-bot.git/blobdiff_plain/d56541ea72dcddf4f67fdfe5d2627533265bc657..cd798f2e6dcf353a2338dae0d6cefab886dff387:/goals/db.py diff --git a/goals/db.py b/goals/db.py index 8a7aff4..11b5467 100644 --- a/goals/db.py +++ b/goals/db.py @@ -23,6 +23,7 @@ class Vision(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) name: str = Field(default=None, unique=True) complete_date: dt | None = Field(default=None) + goals: list["Goal"] = Relationship(back_populates="vision") def __str__(self): return f'{self.name} ({self.id})' @@ -34,6 +35,7 @@ class Goal(SQLModel, table=True): vision_id: int | None = Field(default=None, foreign_key="vision.id") notes: str | None = Field(default=None) tasks: list["Task"] = Relationship(back_populates="goal") + vision: Vision = Relationship(back_populates="goals") def __str__(self): return f'{self.name} ({self.id})' @@ -50,6 +52,9 @@ class Task(SQLModel, table=True): def pretty_print(goal, tasks): results = [] results.append(f' ## {goal}') + if not tasks: + results.append('-- Nothing to list --') + for task in tasks: if(task.complete_date): results.append(f' - [x] {task}') @@ -72,8 +77,10 @@ class Data(): return 'Success' - def print_all_visions(self): - pass + def get_all_visions(self): + with Session(self.engine) as session: + cmd = select(Vision).where(Vision.complete_date == None) + return session.exec(cmd).all() def print_ophan_tasks(self): pass @@ -85,12 +92,29 @@ class Data(): return session.exec(cmd).all() + def get_done_goals(self): + '''List all goals''' + with Session(self.engine) as session: + cmd = select(Goal).where(Goal.complete_date != None) + return session.exec(cmd).all() + + def get_goal(self, id): with Session(self.engine) as session: cmd = select(Goal).where(Goal.id == id) goal = session.exec(cmd).first() return (goal, goal.tasks) + def get_vision(self, id): + with Session(self.engine) as session: + cmd = select(Vision).where(Vision.id == id) + vision = session.exec(cmd).first() + if vision: + return (vision, vision.goals) + else: + return ('Not found', []) + + def complete_vision(self, id): pass @@ -138,8 +162,8 @@ class Data(): '''Goals may move between visions''' with Session(self.engine) as session: cmd = select(Goal).where(Goal.id == goal_id) - new = session.exec(cmd).first() - new.vision_id = vision_id + goal = session.exec(cmd).first() + goal.vision_id = vision_id session.commit() def add_note(self, note, goal):