feat: Announcements (#7431)

Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
This commit is contained in:
Michael Genson
2026-04-11 08:26:14 -05:00
committed by GitHub
parent 306f2dcfc6
commit d2b0681dbb
32 changed files with 631 additions and 62 deletions

View File

@@ -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 ###

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -7,6 +7,7 @@ from mealie.schema._mealie import MealieModel
class UpdateGroupPreferences(MealieModel):
private_group: bool = True
show_announcements: bool = True
class CreateGroupPreferences(UpdateGroupPreferences):

View File

@@ -9,6 +9,8 @@ from mealie.schema._mealie import MealieModel
class UpdateHouseholdPreferences(MealieModel):
private_household: bool = True
show_announcements: bool = True
lock_recipe_edits_from_other_households: bool = True
first_day_of_week: int = 0

View File

@@ -116,6 +116,11 @@ class UserBase(MealieModel):
household: str | None = None
advanced: bool = False
# Announcements
show_announcements: bool = True
last_read_announcement: str | None = None
# Permissions
can_invite: bool = False
can_manage: bool = False
can_manage_household: bool = False