yet another refactor

This commit is contained in:
2026-10-16 16:47:08 +02:00
parent 5cea645062
commit da0a78d2d0
6 changed files with 61 additions and 122 deletions
+22 -2
View File
@@ -1,7 +1,9 @@
from pydantic import Field, computed_field
from sqlalchemy import ForeignKey, String, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column, relationship
from sqlalchemy.orm import Mapped, Session, mapped_column, relationship
from src.db_utils import upsert
from src.models.category_budget import CategoryBudgetDb
from src.models.common import BaseModelDb, ExportBaseModel, hashify
@@ -53,4 +55,22 @@ class CategoryDb(BaseModelDb):
"CategoryDb", remote_side="CategoryDb.id", back_populates="children"
)
children = relationship("CategoryDb", back_populates="parent")
budgets = relationship("CategoryBudgetDb", back_populates="category")
budgets: Mapped[list[CategoryBudgetDb]] = relationship(back_populates="category")
def upsert_category(
session: Session, category: Category | None, do_commit: bool = True
) -> CategoryDb | None:
if category is None:
return None
parent = upsert_category(session, category.parent, do_commit=False)
parameters = {"name": category.name, "parent": parent}
return upsert(
session,
CategoryDb,
parameters,
parameters,
do_update=False,
do_commit=do_commit,
)