diff --git a/mealie/alembic/versions/2026-03-27-20.19.07_4395a04f7784_add_announcements.py b/mealie/alembic/versions/2026-03-27-20.19.07_4395a04f7784_add_announcements.py new file mode 100644 index 000000000..a464c9ecd --- /dev/null +++ b/mealie/alembic/versions/2026-03-27-20.19.07_4395a04f7784_add_announcements.py @@ -0,0 +1,47 @@ +"""add announcements + +Revision ID: 4395a04f7784 +Revises: cdc93edaf73d +Create Date: 2026-03-27 20:19:07.459075 + +""" + +import sqlalchemy as sa +from alembic import op + + +# revision identifiers, used by Alembic. +revision = "4395a04f7784" +down_revision: str | None = "cdc93edaf73d" +branch_labels: str | tuple[str, ...] | None = None +depends_on: str | tuple[str, ...] | None = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table("group_preferences", schema=None) as batch_op: + batch_op.add_column(sa.Column("show_announcements", sa.Boolean(), nullable=False, server_default=sa.true())) + + with op.batch_alter_table("household_preferences", schema=None) as batch_op: + batch_op.add_column(sa.Column("show_announcements", sa.Boolean(), nullable=False, server_default=sa.true())) + + with op.batch_alter_table("users", schema=None) as batch_op: + batch_op.add_column(sa.Column("show_announcements", sa.Boolean(), nullable=False, server_default=sa.true())) + batch_op.add_column(sa.Column("last_read_announcement", sa.String(), nullable=True)) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table("users", schema=None) as batch_op: + batch_op.drop_column("last_read_announcement") + batch_op.drop_column("show_announcements") + + with op.batch_alter_table("household_preferences", schema=None) as batch_op: + batch_op.drop_column("show_announcements") + + with op.batch_alter_table("group_preferences", schema=None) as batch_op: + batch_op.drop_column("show_announcements") + + # ### end Alembic commands ### diff --git a/mealie/db/models/group/preferences.py b/mealie/db/models/group/preferences.py index d936441d4..a7a1c2fb3 100644 --- a/mealie/db/models/group/preferences.py +++ b/mealie/db/models/group/preferences.py @@ -20,6 +20,7 @@ class GroupPreferencesModel(SqlAlchemyBase, BaseMixins): group: Mapped[Optional["Group"]] = orm.relationship("Group", back_populates="preferences") private_group: Mapped[bool | None] = mapped_column(sa.Boolean, default=True) + show_announcements: Mapped[bool] = mapped_column(sa.Boolean, default=True) # Deprecated (see household preferences) first_day_of_week: Mapped[int | None] = mapped_column(sa.Integer, default=0) diff --git a/mealie/db/models/household/preferences.py b/mealie/db/models/household/preferences.py index 88f9ae728..6951f0260 100644 --- a/mealie/db/models/household/preferences.py +++ b/mealie/db/models/household/preferences.py @@ -22,6 +22,8 @@ class HouseholdPreferencesModel(SqlAlchemyBase, BaseMixins): group_id: AssociationProxy[GUID] = association_proxy("household", "group_id") private_household: Mapped[bool | None] = mapped_column(sa.Boolean, default=True) + show_announcements: Mapped[bool] = mapped_column(sa.Boolean, default=True) + lock_recipe_edits_from_other_households: Mapped[bool | None] = mapped_column(sa.Boolean, default=True) first_day_of_week: Mapped[int | None] = mapped_column(sa.Integer, default=0) diff --git a/mealie/db/models/users/users.py b/mealie/db/models/users/users.py index f25bbb924..9dece804a 100644 --- a/mealie/db/models/users/users.py +++ b/mealie/db/models/users/users.py @@ -68,7 +68,11 @@ class User(SqlAlchemyBase, BaseMixins): login_attemps: Mapped[int | None] = mapped_column(Integer, default=0) locked_at: Mapped[datetime | None] = mapped_column(NaiveDateTime, default=None) - # Group Permissions + # Announcements + show_announcements: Mapped[bool] = mapped_column(Boolean, default=True) + last_read_announcement: Mapped[str | None] = mapped_column(String) + + # Permissions can_manage_household: Mapped[bool | None] = mapped_column(Boolean, default=False) can_manage: Mapped[bool | None] = mapped_column(Boolean, default=False) can_invite: Mapped[bool | None] = mapped_column(Boolean, default=False)