Skip to content

Commit f1fbf0d

Browse files
fix: delete shopping list if no users are found (#3290)
1 parent 63a362a commit f1fbf0d

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

alembic/versions/2024-02-23-16.15.07_2298bb460ffd_added_user_to_shopping_list.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313

1414
import mealie.db.migration_types
1515
from alembic import op
16+
from mealie.core.root_logger import get_logger
17+
18+
logger = get_logger()
1619

1720
# revision identifiers, used by Alembic.
1821
revision = "2298bb460ffd"
@@ -37,13 +40,20 @@ def find_user_id_for_group(group_id: UUID):
3740
with session:
3841
try:
3942
# try to find an admin user
40-
user_id = session.execute(sa.text(stmt).bindparams(group_id=group_id)).scalar_one()
43+
return session.execute(sa.text(stmt).bindparams(group_id=group_id)).scalar_one()
4144
except orm.exc.NoResultFound:
45+
pass
46+
47+
try:
4248
# fallback to any user
43-
user_id = session.execute(
49+
return session.execute(
4450
sa.text("SELECT id FROM users WHERE group_id=:group_id LIMIT 1").bindparams(group_id=group_id)
4551
).scalar_one()
46-
return user_id
52+
except orm.exc.NoResultFound:
53+
pass
54+
55+
# no user could be found
56+
return None
4757

4858

4959
def populate_shopping_list_users():
@@ -54,11 +64,17 @@ def populate_shopping_list_users():
5464
list_ids_and_group_ids = session.execute(sa.text("SELECT id, group_id FROM shopping_lists")).all()
5565
for list_id, group_id in list_ids_and_group_ids:
5666
user_id = find_user_id_for_group(group_id)
57-
session.execute(
58-
sa.text(f"UPDATE shopping_lists SET user_id=:user_id WHERE id=:id").bindparams(
59-
user_id=user_id, id=list_id
67+
if user_id:
68+
session.execute(
69+
sa.text(f"UPDATE shopping_lists SET user_id=:user_id WHERE id=:id").bindparams(
70+
user_id=user_id, id=list_id
71+
)
72+
)
73+
else:
74+
logger.warning(
75+
f"No user found for shopping list {list_id} with group {group_id}; deleting shopping list"
6076
)
61-
)
77+
session.execute(sa.text(f"DELETE FROM shopping_lists WHERE id=:id").bindparams(id=list_id))
6278

6379

6480
def upgrade():

0 commit comments

Comments
 (0)