83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
import uuid
|
|
|
|
from sqlalchemy import select
|
|
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: uuid.UUID):
|
|
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: uuid.UUID):
|
|
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()
|
|
|
|
async def delete_group(db: AsyncSession, group_id: uuid.UUID):
|
|
from sqlalchemy import delete
|
|
await db.execute(
|
|
delete(Group)
|
|
.where(Group.id == group_id)
|
|
)
|
|
await db.commit()
|