Neda/Back/domains/groups/repo.py
2026-03-07 19:09:49 +03:30

73 lines
2.0 KiB
Python

from sqlalchemy import select
import uuid
from sqlalchemy.ext.asyncio import AsyncSession
from domains.groups.models import Group, GroupMember
async def create_group(db: AsyncSession, group: Group):
db.add(group)
await db.commit()
await db.refresh(group)
return group
async def get_group_by_id(db: AsyncSession, group_id):
result = await db.execute(
select(Group).where(Group.id == group_id)
)
return result.scalar_one_or_none()
async def add_group_member(db: AsyncSession, membership: GroupMember):
db.add(membership)
await db.commit()
return membership
async def get_user_groups(db: AsyncSession, user_id):
result = await db.execute(
select(Group)
.join(GroupMember)
.where(GroupMember.user_id == user_id)
)
return result.scalars().all()
async def get_groups_by_type(db: AsyncSession, group_type):
result = await db.execute(
select(Group).where(Group.type == group_type)
)
return result.scalars().all()
async def get_all_groups(db: AsyncSession):
result = await db.execute(select(Group))
return result.scalars().all()
async def get_group_members_with_details(db: AsyncSession, group_id: uuid.UUID):
from domains.users.models import User
result = await db.execute(
select(GroupMember, User.username)
.join(User, GroupMember.user_id == User.id)
.where(GroupMember.group_id == group_id)
)
return result.all()
async def get_group_member(db: AsyncSession, group_id: uuid.UUID, user_id: uuid.UUID):
result = await db.execute(
select(GroupMember)
.where(GroupMember.group_id == group_id)
.where(GroupMember.user_id == user_id)
)
return result.scalar_one_or_none()
async def delete_group_member(db: AsyncSession, group_id: uuid.UUID, user_id: uuid.UUID):
from sqlalchemy import delete
await db.execute(
delete(GroupMember)
.where(GroupMember.group_id == group_id)
.where(GroupMember.user_id == user_id)
)
await db.commit()