Skip to content

Commit

Permalink
Merge pull request #21 from EnhancedJax/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
EnhancedJax authored Dec 20, 2024
2 parents fe045f3 + 2f0d5a2 commit d8f387c
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 17 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## 0.1.15

- Fix: Deleted categories visible

## 0.1.14

- Fix: Lock textual version and defer upgrade to future
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "Bagels"
version = "0.1.14"
version = "0.1.15"
authors = [
{ name = "Jax", email = "enhancedjax@gmail.com" }
]
Expand Down
29 changes: 17 additions & 12 deletions src/bagels/managers/categories.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,12 @@
Session = sessionmaker(bind=db_engine)


def _get_base_categories_query(include_deleted=False):
"""Base query for categories with optional filtering of deleted entries."""
stmt = select(Category)
if not include_deleted:
stmt = stmt.filter(Category.deletedAt.is_(None))
return stmt


# region Get
def get_categories_count():
"""Count all categories excluding deleted ones."""
session = Session()
try:
stmt = _get_base_categories_query()
stmt = select(Category)
return len(session.scalars(stmt).all())
finally:
session.close()
Expand All @@ -35,9 +27,10 @@ def get_all_categories_tree():
session = Session()
try:
stmt = (
_get_base_categories_query()
select(Category)
.options(joinedload(Category.parentCategory))
.order_by(Category.id)
.filter(Category.deletedAt.is_(None))
)
categories = session.scalars(stmt).all()

Expand Down Expand Up @@ -87,7 +80,11 @@ def get_category_by_id(category_id):
"""Retrieve a category by its ID."""
session = Session()
try:
stmt = _get_base_categories_query().filter_by(id=category_id)
stmt = (
select(Category)
.filter_by(id=category_id)
.filter(Category.deletedAt.is_(None))
)
return session.scalars(stmt).first()
finally:
session.close()
Expand Down Expand Up @@ -186,12 +183,20 @@ def update_category(category_id, data):

# region Delete
def delete_category(category_id):
"""Delete a category by marking it as deleted."""
"""Delete a category by marking it and its subcategories as deleted."""
session = Session()
try:
category = session.get(Category, category_id)
if category:
category.deletedAt = datetime.now()

# Delete subcategories
subcategories = (
session.query(Category).filter_by(parentCategoryId=category_id).all()
)
for subcategory in subcategories:
subcategory.deletedAt = datetime.now()

session.commit()
session.refresh(category)
session.expunge(category)
Expand Down
22 changes: 22 additions & 0 deletions src/bagels/models/database/app.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from datetime import datetime
import yaml
from pathlib import Path
from sqlalchemy import create_engine, inspect, text
Expand Down Expand Up @@ -66,6 +67,26 @@ def _create_default_categories(session):
session.commit()


def _fix_dangling_categories(session):
dangling_subcategories = (
session.query(Category)
.filter(
Category.parentCategoryId.isnot(None),
Category.deletedAt.is_(None),
Category.parentCategoryId.in_(
session.query(Category.id).filter(Category.deletedAt.isnot(None))
),
)
.all()
)

for subcategory in dangling_subcategories:
subcategory.deletedAt = datetime.now()
session.add(subcategory)

session.commit()


def _sync_database_schema():
try:
inspector = inspect(db_engine)
Expand Down Expand Up @@ -101,6 +122,7 @@ def init_db():
session = Session()
_create_outside_source_account(session)
_create_default_categories(session)
_fix_dangling_categories(session)
session.close()


Expand Down
8 changes: 4 additions & 4 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit d8f387c

Please sign in to comment.