X-Git-Url: https://apps.delaporte.us/gitweb/matrix-goal-bot.git/blobdiff_plain/f6957376c90b1931bed792024ec6bd914b7d4546..d9963fa251c1068be30ed1307fe8d8531e618f20:/goals/db.py diff --git a/goals/db.py b/goals/db.py index 84369e2..fa88dc5 100644 --- a/goals/db.py +++ b/goals/db.py @@ -2,7 +2,7 @@ import logging import os from datetime import datetime as dt -from sqlmodel import Field, Session, SQLModel, create_engine, select, text +from sqlmodel import Field, Session, SQLModel, create_engine, select, text, Relationship ## Todo List # - [ ] goal / vision / task @@ -33,6 +33,7 @@ class Goal(SQLModel, table=True): complete_date: dt | None = Field(default=None) vision_id: int | None = Field(default=None, foreign_key="vision.id") notes: str | None = Field(default=None) + tasks: list["Task"] = Relationship(back_populates="goal") def __str__(self): return f'{self.name} ({self.id})' @@ -41,6 +42,9 @@ class Task(SQLModel, table=True): name: str = Field(default=None, unique=True) goal_id: int | None = Field(default=None, foreign_key="goal.id") complete_date: dt | None = Field(default=None) + goal: Goal = Relationship(back_populates="tasks") + def __str__(self): + return f'{self.name} ({self.id})' class Data(): def __init__(self, db_file = DB_FILE): @@ -66,11 +70,16 @@ class Data(): def list_goals(self): '''List all goals''' - pass + with Session(self.engine) as session: + cmd = select(Goal).where(Goal.complete_date == None) + return session.exec(cmd).all() - def print_goal(self, id, include_finished=False): - '''Includes tasks''' - pass + + 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 complete_vision(self, id): pass @@ -96,10 +105,11 @@ class Data(): def add_goal(self, name): return self.add_with_name(Goal, name) - def add_task(self, name, goal_id): + def add_task(self, goal_id, name): result = self.add_with_name(Task, name) with Session(self.engine) as session: - new = select(Task).where(Task.name == name).first() + cmd = select(Task).where(Task.name == name) + new = session.exec(cmd).first() new.goal_id = goal_id session.commit() return result @@ -107,7 +117,8 @@ class Data(): def assign_vision(self, goal_id, vision_id): '''Goals may move between visions''' with Session(self.engine) as session: - new = select(Goal).where(Goal.id == goal_id).first() + cmd = select(Goal).where(Goal.id == goal_id) + new = session.exec(cmd).first() new.vision_id = vision_id session.commit()