mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
feat: init usergroup linking to a course
This commit is contained in:
parent
a6152ef1f5
commit
4f75e6a90a
12 changed files with 428 additions and 55 deletions
|
|
@ -9,6 +9,7 @@ from src.services.users.usergroups import (
|
|||
add_users_to_usergroup,
|
||||
create_usergroup,
|
||||
delete_usergroup_by_id,
|
||||
get_usergroups_by_resource,
|
||||
read_usergroup_by_id,
|
||||
read_usergroups_by_org_id,
|
||||
remove_resources_from_usergroup,
|
||||
|
|
@ -64,6 +65,19 @@ async def api_get_usergroups(
|
|||
"""
|
||||
return await read_usergroups_by_org_id(request, db_session, current_user, org_id)
|
||||
|
||||
@router.get("/resource/{resource_uuid}", response_model=list[UserGroupRead], tags=["usergroups"])
|
||||
async def api_get_usergroupsby_resource(
|
||||
*,
|
||||
request: Request,
|
||||
db_session: Session = Depends(get_db_session),
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
resource_uuid: str,
|
||||
) -> list[UserGroupRead]:
|
||||
"""
|
||||
Get UserGroups by Org
|
||||
"""
|
||||
return await get_usergroups_by_resource(request, db_session, current_user, resource_uuid)
|
||||
|
||||
|
||||
@router.put("/{usergroup_id}", response_model=UserGroupRead, tags=["usergroups"])
|
||||
async def api_update_usergroup(
|
||||
|
|
|
|||
|
|
@ -119,6 +119,41 @@ async def read_usergroups_by_org_id(
|
|||
return usergroups
|
||||
|
||||
|
||||
async def get_usergroups_by_resource(
|
||||
request: Request,
|
||||
db_session: Session,
|
||||
current_user: PublicUser | AnonymousUser,
|
||||
resource_uuid: str,
|
||||
) -> list[UserGroupRead]:
|
||||
|
||||
statement = select(UserGroupResource).where(
|
||||
UserGroupResource.resource_uuid == resource_uuid
|
||||
)
|
||||
usergroup_resources = db_session.exec(statement).all()
|
||||
|
||||
# RBAC check
|
||||
await rbac_check(
|
||||
request,
|
||||
usergroup_uuid="usergroup_X",
|
||||
current_user=current_user,
|
||||
action="read",
|
||||
db_session=db_session,
|
||||
)
|
||||
|
||||
usergroup_ids = [usergroup.usergroup_id for usergroup in usergroup_resources]
|
||||
|
||||
# get usergroups
|
||||
usergroups = []
|
||||
for usergroup_id in usergroup_ids:
|
||||
statement = select(UserGroup).where(UserGroup.id == usergroup_id)
|
||||
usergroup = db_session.exec(statement).first()
|
||||
usergroups.append(usergroup)
|
||||
|
||||
usergroups = [UserGroupRead.from_orm(usergroup) for usergroup in usergroups]
|
||||
|
||||
return usergroups
|
||||
|
||||
|
||||
async def update_usergroup_by_id(
|
||||
request: Request,
|
||||
db_session: Session,
|
||||
|
|
@ -258,7 +293,6 @@ async def remove_users_from_usergroup(
|
|||
detail="UserGroup not found",
|
||||
)
|
||||
|
||||
# RBAC check
|
||||
# RBAC check
|
||||
await rbac_check(
|
||||
request,
|
||||
|
|
@ -312,8 +346,21 @@ async def add_resources_to_usergroup(
|
|||
resources_uuids_array = resources_uuids.split(",")
|
||||
|
||||
for resource_uuid in resources_uuids_array:
|
||||
# TODO : Find a way to check if resource exists
|
||||
# Check if a link between UserGroup and Resource already exists
|
||||
statement = select(UserGroupResource).where(
|
||||
UserGroupResource.usergroup_id == usergroup_id,
|
||||
UserGroupResource.resource_uuid == resource_uuid,
|
||||
)
|
||||
usergroup_resource = db_session.exec(statement).first()
|
||||
|
||||
if usergroup_resource:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f"Resource {resource_uuid} already exists in UserGroup",
|
||||
)
|
||||
continue
|
||||
|
||||
# TODO : Find a way to check if resource really exists
|
||||
usergroup_obj = UserGroupResource(
|
||||
usergroup_id=usergroup_id,
|
||||
resource_uuid=resource_uuid,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue