diff options
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/api/groups.py')
| -rw-r--r-- | packages/meshbay-hub/src/meshbay_hub/api/groups.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/api/groups.py b/packages/meshbay-hub/src/meshbay_hub/api/groups.py index 000f3f7..43d72c3 100644 --- a/packages/meshbay-hub/src/meshbay_hub/api/groups.py +++ b/packages/meshbay-hub/src/meshbay_hub/api/groups.py @@ -33,12 +33,17 @@ async def my_groups( .order_by(Group.name) ) groups = result.scalars().all() + muted_rows = await db.execute( + select(GroupMember.group_id, GroupMember.muted) + .where(GroupMember.user_id == current_user.id)) + muted_map = {gid: bool(m) for gid, m in muted_rows.all()} return { "groups": [ { "id": g.id, "name": g.name, "visibility": g.visibility, + "muted": muted_map.get(g.id, False), "join_policy": g.join_policy, "created_at": g.created_at.isoformat(), "is_admin": g.admin_id == current_user.id, @@ -301,12 +306,39 @@ async def add_group_member( db, target.id, "group_invite", f"You were added to {group.name}", link=f"#/group/{group_id}", + group_id=group_id, ) await db.commit() return {"status": "stored", "group_id": group_id, "username": username} +class MuteRequest(BaseModel): + muted: bool + + +@router.post("/{group_id}/mute") +async def set_group_mute( + group_id: str, + body: MuteRequest, + current_user: User = Depends(require_user_scope), + db: AsyncSession = Depends(get_db), +): + """ + Turn this group's notifications on or off, for this account. + + Server-side on purpose: it used to be a checkbox in the browser's + localStorage that nothing ever read, so turning notifications off for a group + had no effect anywhere. Now nothing is created in the first place. + """ + membership = await db.get(GroupMember, (group_id, current_user.id)) + if not membership: + raise HTTPException(status_code=404, detail="Not a member of this group") + membership.muted = body.muted + await db.commit() + return {"status": "ok", "group_id": group_id, "muted": body.muted} + + @router.delete("/{group_id}") async def delete_group( group_id: str, |