From 71279a1294878dacdd49bad836abd0db56521a0e Mon Sep 17 00:00:00 2001 From: swve Date: Tue, 28 Nov 2023 20:49:20 +0100 Subject: [PATCH] feat: add response models to endpoints --- apps/api/src/db/organizations.py | 2 ++ apps/api/src/db/roles.py | 14 ++++++-- apps/api/src/routers/blocks.py | 13 ++++---- apps/api/src/routers/courses/activities.py | 17 +++++----- apps/api/src/routers/courses/chapters.py | 13 +++++--- apps/api/src/routers/courses/collections.py | 11 ++++--- apps/api/src/routers/courses/courses.py | 17 +++++----- apps/api/src/routers/install/install.py | 32 ++++++++++++++----- apps/api/src/routers/orgs.py | 18 +++++++---- apps/api/src/routers/roles.py | 8 ++--- apps/api/src/routers/trail.py | 7 +--- apps/api/src/routers/users.py | 2 +- .../block_types/imageBlock/imageBlock.py | 7 +++- .../blocks/block_types/pdfBlock/pdfBlock.py | 6 +++- .../block_types/videoBlock/videoBlock.py | 8 +++-- .../services/courses/activities/activities.py | 8 ++++- apps/api/src/services/courses/courses.py | 8 +++++ apps/api/src/services/install/install.py | 8 ++++- apps/api/src/services/orgs/orgs.py | 9 +++++- apps/api/src/services/roles/roles.py | 8 ++++- 20 files changed, 148 insertions(+), 68 deletions(-) diff --git a/apps/api/src/db/organizations.py b/apps/api/src/db/organizations.py index 6c8c2a1b..9d3d1412 100644 --- a/apps/api/src/db/organizations.py +++ b/apps/api/src/db/organizations.py @@ -26,3 +26,5 @@ class OrganizationCreate(OrganizationBase): class OrganizationRead(OrganizationBase): id: int org_uuid: str + creation_date: str + update_date: str diff --git a/apps/api/src/db/roles.py b/apps/api/src/db/roles.py index 70d52637..09ff4206 100644 --- a/apps/api/src/db/roles.py +++ b/apps/api/src/db/roles.py @@ -40,7 +40,7 @@ class RoleTypeEnum(str, Enum): class RoleBase(SQLModel): name: str description: Optional[str] - rights: Optional[Union[Rights,dict]] = Field(default={}, sa_column=Column(JSON)) + rights: Optional[Union[Rights, dict]] = Field(default={}, sa_column=Column(JSON)) class Role(RoleBase, table=True): @@ -52,13 +52,21 @@ class Role(RoleBase, table=True): update_date: str = "" +class RoleRead(RoleBase): + id: Optional[int] = Field(default=None, primary_key=True) + org_id: int = Field(default=None, foreign_key="organization.id") + role_type: RoleTypeEnum = RoleTypeEnum.TYPE_GLOBAL + role_uuid: str + creation_date: str + update_date: str + + class RoleCreate(RoleBase): org_id: Optional[int] = Field(default=None, foreign_key="organization.id") - class RoleUpdate(SQLModel): role_id: int = Field(default=None, foreign_key="role.id") name: Optional[str] description: Optional[str] - rights: Optional[Union[Rights,dict]] = Field(default={}, sa_column=Column(JSON)) + rights: Optional[Union[Rights, dict]] = Field(default={}, sa_column=Column(JSON)) diff --git a/apps/api/src/routers/blocks.py b/apps/api/src/routers/blocks.py index f598e2c6..a30c6cd4 100644 --- a/apps/api/src/routers/blocks.py +++ b/apps/api/src/routers/blocks.py @@ -1,4 +1,5 @@ from fastapi import APIRouter, Depends, UploadFile, Form, Request +from src.db.blocks import BlockRead from src.core.events.database import get_db_session from src.security.auth import get_current_user from src.services.blocks.block_types.imageBlock.imageBlock import ( @@ -30,7 +31,7 @@ async def api_create_image_file_block( activity_id: str = Form(), db_session=Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> BlockRead: """ Create new image file """ @@ -43,7 +44,7 @@ async def api_get_image_file_block( block_uuid: str, db_session=Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> BlockRead: """ Get image file """ @@ -62,7 +63,7 @@ async def api_create_video_file_block( activity_id: str = Form(), db_session=Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> BlockRead: """ Create new video file """ @@ -75,7 +76,7 @@ async def api_get_video_file_block( block_uuid: str, db_session=Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> BlockRead: """ Get video file """ @@ -94,7 +95,7 @@ async def api_create_pdf_file_block( activity_id: str = Form(), db_session=Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> BlockRead: """ Create new pdf file """ @@ -107,7 +108,7 @@ async def api_get_pdf_file_block( block_uuid: str, db_session=Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> BlockRead: """ Get pdf file """ diff --git a/apps/api/src/routers/courses/activities.py b/apps/api/src/routers/courses/activities.py index 963d14f9..3b609b2d 100644 --- a/apps/api/src/routers/courses/activities.py +++ b/apps/api/src/routers/courses/activities.py @@ -1,5 +1,6 @@ +from typing import List from fastapi import APIRouter, Depends, UploadFile, Form, Request -from src.db.activities import ActivityCreate, ActivityUpdate +from src.db.activities import ActivityCreate, ActivityRead, ActivityUpdate from src.db.users import PublicUser from src.core.events.database import get_db_session from src.services.courses.activities.activities import ( @@ -26,7 +27,7 @@ async def api_create_activity( activity_object: ActivityCreate, current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), -): +) -> ActivityRead: """ Create new activity """ @@ -39,7 +40,7 @@ async def api_get_activity( activity_id: str, current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), -): +) -> ActivityRead: """ Get single activity by activity_id """ @@ -54,7 +55,7 @@ async def api_get_activities( coursechapter_id: str, current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), -): +) -> List[ActivityRead]: """ Get CourseChapter activities """ @@ -67,7 +68,7 @@ async def api_update_activity( activity_object: ActivityUpdate, current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), -): +) -> ActivityRead: """ Update activity by activity_id """ @@ -98,7 +99,7 @@ async def api_create_video_activity( current_user: PublicUser = Depends(get_current_user), video_file: UploadFile | None = None, db_session=Depends(get_db_session), -): +) -> ActivityRead: """ Create new activity """ @@ -118,7 +119,7 @@ async def api_create_external_video_activity( external_video: ExternalVideo, current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), -): +) -> ActivityRead: """ Create new activity """ @@ -135,7 +136,7 @@ async def api_create_documentpdf_activity( current_user: PublicUser = Depends(get_current_user), pdf_file: UploadFile | None = None, db_session=Depends(get_db_session), -): +) -> ActivityRead: """ Create new activity """ diff --git a/apps/api/src/routers/courses/chapters.py b/apps/api/src/routers/courses/chapters.py index 263a93d7..b4e4574b 100644 --- a/apps/api/src/routers/courses/chapters.py +++ b/apps/api/src/routers/courses/chapters.py @@ -60,7 +60,9 @@ async def api_get_chapter_meta( """ Get Chapters metadata """ - return await get_depreceated_course_chapters(request, course_id, current_user, db_session) + return await get_depreceated_course_chapters( + request, course_id, current_user, db_session + ) @router.put("/order/{course_id}") @@ -85,12 +87,15 @@ async def api_get_chapter_by( course_id: int, page: int, limit: int, + current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), ) -> List[ChapterRead]: """ Get Course Chapters by page and limit """ - return await get_course_chapters(request, course_id, db_session, page, limit) + return await get_course_chapters( + request, course_id, db_session, current_user, page, limit + ) @router.put("/{coursechapter_id}") @@ -118,6 +123,4 @@ async def api_delete_coursechapter( Delete CourseChapters by ID """ - return await delete_chapter( - request, coursechapter_id, current_user, db_session - ) + return await delete_chapter(request, coursechapter_id, current_user, db_session) diff --git a/apps/api/src/routers/courses/collections.py b/apps/api/src/routers/courses/collections.py index 99ab1d2d..2b0fd572 100644 --- a/apps/api/src/routers/courses/collections.py +++ b/apps/api/src/routers/courses/collections.py @@ -1,6 +1,7 @@ +from typing import List from fastapi import APIRouter, Depends, Request from src.core.events.database import get_db_session -from src.db.collections import CollectionCreate, CollectionUpdate +from src.db.collections import CollectionCreate, CollectionRead, CollectionUpdate from src.security.auth import get_current_user from src.services.users.users import PublicUser from src.services.courses.collections import ( @@ -21,7 +22,7 @@ async def api_create_collection( collection_object: CollectionCreate, current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), -): +) -> CollectionRead: """ Create new Collection """ @@ -34,7 +35,7 @@ async def api_get_collection( collection_id: str, current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), -): +) -> CollectionRead: """ Get single collection by ID """ @@ -49,7 +50,7 @@ async def api_get_collections_by( org_id: str, current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), -): +) -> List[CollectionRead]: """ Get collections by page and limit """ @@ -62,7 +63,7 @@ async def api_update_collection( collection_object: CollectionUpdate, current_user: PublicUser = Depends(get_current_user), db_session=Depends(get_db_session), -): +) -> CollectionRead: """ Update collection by ID """ diff --git a/apps/api/src/routers/courses/courses.py b/apps/api/src/routers/courses/courses.py index 335f3665..5914647d 100644 --- a/apps/api/src/routers/courses/courses.py +++ b/apps/api/src/routers/courses/courses.py @@ -1,8 +1,9 @@ +from typing import List from fastapi import APIRouter, Depends, UploadFile, Form, Request from sqlmodel import Session from src.core.events.database import get_db_session from src.db.users import PublicUser -from src.db.courses import CourseCreate, CourseUpdate +from src.db.courses import CourseCreate, CourseRead, CourseUpdate, FullCourseReadWithTrail from src.security.auth import get_current_user from src.services.courses.courses import ( create_course, @@ -31,7 +32,7 @@ async def api_create_course( current_user: PublicUser = Depends(get_current_user), db_session: Session = Depends(get_db_session), thumbnail: UploadFile | None = None, -): +) -> CourseRead: """ Create new Course """ @@ -55,7 +56,7 @@ async def api_create_course_thumbnail( thumbnail: UploadFile | None = None, db_session: Session = Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> CourseRead: """ Update new Course Thumbnail """ @@ -70,7 +71,7 @@ async def api_get_course( course_id: str, db_session: Session = Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> CourseRead: """ Get single Course by course_id """ @@ -85,7 +86,7 @@ async def api_get_course_meta( course_id: int, db_session: Session = Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> FullCourseReadWithTrail: """ Get single Course Metadata (chapters, activities) by course_id """ @@ -102,9 +103,9 @@ async def api_get_course_by_orgslug( org_slug: str, db_session: Session = Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> List[CourseRead]: """ - Get houses by page and limit + Get courses by page and limit """ return await get_courses_orgslug( request, current_user, org_slug, db_session, page, limit @@ -117,7 +118,7 @@ async def api_update_course( course_object: CourseUpdate, db_session: Session = Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), -): +) -> CourseRead: """ Update Course by course_id """ diff --git a/apps/api/src/routers/install/install.py b/apps/api/src/routers/install/install.py index dae19f3a..38bebb69 100644 --- a/apps/api/src/routers/install/install.py +++ b/apps/api/src/routers/install/install.py @@ -1,4 +1,5 @@ from fastapi import APIRouter, Depends, Request +from src.db.install import InstallRead from src.core.events.database import get_db_session from src.db.organizations import OrganizationCreate from src.db.users import UserCreate @@ -18,8 +19,10 @@ router = APIRouter() @router.post("/start") async def api_create_install_instance( - request: Request, data: dict, db_session=Depends(get_db_session), -): + request: Request, + data: dict, + db_session=Depends(get_db_session), +) -> InstallRead: # create install install = await create_install_instance(request, data, db_session) @@ -27,7 +30,9 @@ async def api_create_install_instance( @router.get("/latest") -async def api_get_latest_install_instance(request: Request, db_session=Depends(get_db_session),): +async def api_get_latest_install_instance( + request: Request, db_session=Depends(get_db_session) +) -> InstallRead: # get latest created install install = await get_latest_install_instance(request, db_session=db_session) @@ -35,7 +40,10 @@ async def api_get_latest_install_instance(request: Request, db_session=Depends(g @router.post("/default_elements") -async def api_install_def_elements(request: Request, db_session=Depends(get_db_session),): +async def api_install_def_elements( + request: Request, + db_session=Depends(get_db_session), +): elements = await install_default_elements(request, {}, db_session) return elements @@ -43,7 +51,9 @@ async def api_install_def_elements(request: Request, db_session=Depends(get_db_s @router.post("/org") async def api_install_org( - request: Request, org: OrganizationCreate, db_session=Depends(get_db_session), + request: Request, + org: OrganizationCreate, + db_session=Depends(get_db_session), ): organization = await install_create_organization(request, org, db_session) @@ -52,7 +62,10 @@ async def api_install_org( @router.post("/user") async def api_install_user( - request: Request, data: UserCreate, org_slug: str, db_session=Depends(get_db_session), + request: Request, + data: UserCreate, + org_slug: str, + db_session=Depends(get_db_session), ): user = await install_create_organization_user(request, data, org_slug, db_session) @@ -61,8 +74,11 @@ async def api_install_user( @router.post("/update") async def api_update_install_instance( - request: Request, data: dict, step: int, db_session=Depends(get_db_session), -): + request: Request, + data: dict, + step: int, + db_session=Depends(get_db_session), +) -> InstallRead: request.app.db["installs"] # get latest created install diff --git a/apps/api/src/routers/orgs.py b/apps/api/src/routers/orgs.py index 6406dfc4..0f29efb1 100644 --- a/apps/api/src/routers/orgs.py +++ b/apps/api/src/routers/orgs.py @@ -1,7 +1,13 @@ +from typing import List from fastapi import APIRouter, Depends, Request, UploadFile from sqlmodel import Session from src.db.users import PublicUser -from src.db.organizations import OrganizationCreate, OrganizationUpdate +from src.db.organizations import ( + Organization, + OrganizationCreate, + OrganizationRead, + OrganizationUpdate, +) from src.core.events.database import get_db_session from src.security.auth import get_current_user from src.services.orgs.orgs import ( @@ -24,7 +30,7 @@ async def api_create_org( org_object: OrganizationCreate, current_user: PublicUser = Depends(get_current_user), db_session: Session = Depends(get_db_session), -): +) -> OrganizationRead: """ Create new organization """ @@ -37,7 +43,7 @@ async def api_get_org( org_id: str, current_user: PublicUser = Depends(get_current_user), db_session: Session = Depends(get_db_session), -): +) -> OrganizationRead: """ Get single Org by ID """ @@ -50,7 +56,7 @@ async def api_get_org_by_slug( org_slug: str, current_user: PublicUser = Depends(get_current_user), db_session: Session = Depends(get_db_session), -): +) -> OrganizationRead: """ Get single Org by Slug """ @@ -84,7 +90,7 @@ async def api_user_orgs( limit: int, current_user: PublicUser = Depends(get_current_user), db_session: Session = Depends(get_db_session), -): +) -> List[Organization]: """ Get orgs by page and limit by user """ @@ -99,7 +105,7 @@ async def api_update_org( org_object: OrganizationUpdate, current_user: PublicUser = Depends(get_current_user), db_session: Session = Depends(get_db_session), -): +) -> OrganizationRead: """ Update Org by ID """ diff --git a/apps/api/src/routers/roles.py b/apps/api/src/routers/roles.py index 6fcb600d..ef9350e0 100644 --- a/apps/api/src/routers/roles.py +++ b/apps/api/src/routers/roles.py @@ -1,7 +1,7 @@ from fastapi import APIRouter, Depends, Request from sqlmodel import Session from src.core.events.database import get_db_session -from src.db.roles import RoleCreate, RoleUpdate +from src.db.roles import RoleCreate, RoleRead, RoleUpdate from src.security.auth import get_current_user from src.services.roles.roles import create_role, delete_role, read_role, update_role from src.db.users import PublicUser @@ -16,7 +16,7 @@ async def api_create_role( role_object: RoleCreate, current_user: PublicUser = Depends(get_current_user), db_session: Session = Depends(get_db_session), -): +)-> RoleRead: """ Create new role """ @@ -29,7 +29,7 @@ async def api_get_role( role_id: str, current_user: PublicUser = Depends(get_current_user), db_session: Session = Depends(get_db_session), -): +)-> RoleRead: """ Get single role by role_id """ @@ -42,7 +42,7 @@ async def api_update_role( role_object: RoleUpdate, current_user: PublicUser = Depends(get_current_user), db_session: Session = Depends(get_db_session), -): +)-> RoleRead: """ Update role by role_id """ diff --git a/apps/api/src/routers/trail.py b/apps/api/src/routers/trail.py index 0cbcaeff..7e935486 100644 --- a/apps/api/src/routers/trail.py +++ b/apps/api/src/routers/trail.py @@ -38,9 +38,7 @@ async def api_get_user_trail( """ Get a user trails """ - return await get_user_trails( - request, user=user, db_session=db_session - ) + return await get_user_trails(request, user=user, db_session=db_session) @router.get("/org_slug/{org_id}/trail") @@ -58,9 +56,6 @@ async def api_get_trail_by_org_id( ) -# Courses in trail - - @router.post("/add_course/{course_id}") async def api_add_course_to_trail( request: Request, diff --git a/apps/api/src/routers/users.py b/apps/api/src/routers/users.py index d82972da..181898a2 100644 --- a/apps/api/src/routers/users.py +++ b/apps/api/src/routers/users.py @@ -126,7 +126,7 @@ async def api_delete_user( db_session: Session = Depends(get_db_session), current_user: PublicUser = Depends(get_current_user), user_id: int, -): +) : """ Delete User """ diff --git a/apps/api/src/services/blocks/block_types/imageBlock/imageBlock.py b/apps/api/src/services/blocks/block_types/imageBlock/imageBlock.py index f9f3eabf..ebabade3 100644 --- a/apps/api/src/services/blocks/block_types/imageBlock/imageBlock.py +++ b/apps/api/src/services/blocks/block_types/imageBlock/imageBlock.py @@ -3,7 +3,7 @@ from uuid import uuid4 from fastapi import HTTPException, status, UploadFile, Request from sqlmodel import Session, select from src.db.activities import Activity -from src.db.blocks import Block, BlockTypeEnum +from src.db.blocks import Block, BlockRead, BlockTypeEnum from src.db.courses import Course from src.services.blocks.utils.upload_files import upload_file_and_return_file_object from src.services.users.users import PublicUser @@ -65,6 +65,8 @@ async def create_image_block( db_session.commit() db_session.refresh(block) + block = BlockRead.from_orm(block) + return block @@ -75,6 +77,9 @@ async def get_image_block( block = db_session.exec(statement).first() if block: + + block = BlockRead.from_orm(block) + return block else: raise HTTPException( diff --git a/apps/api/src/services/blocks/block_types/pdfBlock/pdfBlock.py b/apps/api/src/services/blocks/block_types/pdfBlock/pdfBlock.py index 07fea4ca..708497e2 100644 --- a/apps/api/src/services/blocks/block_types/pdfBlock/pdfBlock.py +++ b/apps/api/src/services/blocks/block_types/pdfBlock/pdfBlock.py @@ -3,7 +3,7 @@ from uuid import uuid4 from fastapi import HTTPException, status, UploadFile, Request from sqlmodel import Session, select from src.db.activities import Activity -from src.db.blocks import Block, BlockTypeEnum +from src.db.blocks import Block, BlockRead, BlockTypeEnum from src.db.courses import Course from src.services.blocks.utils.upload_files import upload_file_and_return_file_object @@ -66,6 +66,8 @@ async def create_pdf_block( db_session.commit() db_session.refresh(block) + block = BlockRead.from_orm(block) + return block @@ -80,4 +82,6 @@ async def get_pdf_block( status_code=status.HTTP_404_NOT_FOUND, detail="Video file does not exist" ) + block = BlockRead.from_orm(block) + return block diff --git a/apps/api/src/services/blocks/block_types/videoBlock/videoBlock.py b/apps/api/src/services/blocks/block_types/videoBlock/videoBlock.py index 2af8c79b..53006497 100644 --- a/apps/api/src/services/blocks/block_types/videoBlock/videoBlock.py +++ b/apps/api/src/services/blocks/block_types/videoBlock/videoBlock.py @@ -3,7 +3,7 @@ from uuid import uuid4 from fastapi import HTTPException, status, UploadFile, Request from sqlmodel import Session, select from src.db.activities import Activity -from src.db.blocks import Block, BlockTypeEnum +from src.db.blocks import Block, BlockRead, BlockTypeEnum from src.db.courses import Course from src.services.blocks.utils.upload_files import upload_file_and_return_file_object @@ -66,6 +66,8 @@ async def create_video_block( db_session.commit() db_session.refresh(block) + block = BlockRead.from_orm(block) + return block @@ -79,5 +81,7 @@ async def get_video_block( raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Video file does not exist" ) - + + block = BlockRead.from_orm(block) + return block diff --git a/apps/api/src/services/courses/activities/activities.py b/apps/api/src/services/courses/activities/activities.py index d2355b2f..5eeb7656 100644 --- a/apps/api/src/services/courses/activities/activities.py +++ b/apps/api/src/services/courses/activities/activities.py @@ -96,6 +96,8 @@ async def get_activity( # RBAC check await rbac_check(request, activity.activity_uuid, current_user, "read", db_session) + activity = ActivityRead.from_orm(activity) + return activity @@ -130,6 +132,8 @@ async def update_activity( db_session.commit() db_session.refresh(activity) + activity = ActivityRead.from_orm(activity) + return activity @@ -182,7 +186,7 @@ async def get_activities( coursechapter_id: str, current_user: PublicUser | AnonymousUser, db_session: Session, -): +) -> list[ActivityRead]: statement = select(ChapterActivity).where( ChapterActivity.chapter_id == coursechapter_id ) @@ -197,6 +201,8 @@ async def get_activities( # RBAC check await rbac_check(request, "activity_x", current_user, "read", db_session) + activities = [ActivityRead.from_orm(activity) for activity in activities] + return activities diff --git a/apps/api/src/services/courses/courses.py b/apps/api/src/services/courses/courses.py index 4da62ba5..19c8e63e 100644 --- a/apps/api/src/services/courses/courses.py +++ b/apps/api/src/services/courses/courses.py @@ -51,6 +51,8 @@ async def get_course( # RBAC check await rbac_check(request, course.course_uuid, current_user, "read", db_session) + course = CourseRead.from_orm(course) + return course @@ -188,6 +190,8 @@ async def update_course_thumbnail( db_session.commit() db_session.refresh(course) + course = CourseRead.from_orm(course) + return course @@ -223,6 +227,8 @@ async def update_course( db_session.commit() db_session.refresh(course) + course = CourseRead.from_orm(course) + return course @@ -277,6 +283,8 @@ async def get_courses_orgslug( courses = db_session.exec(statement) + courses = [CourseRead.from_orm(course) for course in courses] + return courses diff --git a/apps/api/src/services/install/install.py b/apps/api/src/services/install/install.py index 9c08c3fb..b4538b28 100644 --- a/apps/api/src/services/install/install.py +++ b/apps/api/src/services/install/install.py @@ -3,7 +3,7 @@ from uuid import uuid4 from fastapi import HTTPException, Request from sqlalchemy import desc from sqlmodel import Session, select -from src.db.install import Install +from src.db.install import Install, InstallRead from src.db.organizations import Organization, OrganizationCreate from src.db.roles import Permission, Rights, Role, RoleTypeEnum from src.db.user_organizations import UserOrganization @@ -41,6 +41,8 @@ async def create_install_instance(request: Request, data: dict, db_session: Sess # refresh install instance db_session.refresh(install) + install = InstallRead.from_orm(install) + return install @@ -53,6 +55,8 @@ async def get_latest_install_instance(request: Request, db_session: Session): status_code=404, detail="No install instance found", ) + + install = InstallRead.from_orm(install) return install @@ -78,6 +82,8 @@ async def update_install_instance( # refresh install instance db_session.refresh(install) + install = InstallRead.from_orm(install) + return install diff --git a/apps/api/src/services/orgs/orgs.py b/apps/api/src/services/orgs/orgs.py index 6db9c550..b1701802 100644 --- a/apps/api/src/services/orgs/orgs.py +++ b/apps/api/src/services/orgs/orgs.py @@ -38,6 +38,8 @@ async def get_organization( # RBAC check await rbac_check(request, org.org_uuid, current_user, "read", db_session) + org = OrganizationRead.from_orm(org) + return org @@ -61,6 +63,8 @@ async def get_organization_by_slug( # RBAC check await rbac_check(request, org.org_uuid, current_user, "read", db_session) + org = OrganizationRead.from_orm(org) + return org @@ -160,6 +164,8 @@ async def update_org( db_session.commit() db_session.refresh(org) + org = OrganizationRead.from_orm(org) + return org @@ -197,6 +203,7 @@ async def update_org_logo( db_session.commit() db_session.refresh(org) + return {"detail": "Logo updated"} @@ -244,7 +251,7 @@ async def get_orgs_by_user( user_id: str, page: int = 1, limit: int = 10, -): +) -> list[Organization]: statement = ( select(Organization) .join(UserOrganization) diff --git a/apps/api/src/services/roles/roles.py b/apps/api/src/services/roles/roles.py index 982d76f8..8eceda95 100644 --- a/apps/api/src/services/roles/roles.py +++ b/apps/api/src/services/roles/roles.py @@ -7,7 +7,7 @@ from src.security.rbac.rbac import ( authorization_verify_if_user_is_author, ) from src.db.users import AnonymousUser, PublicUser -from src.db.roles import Role, RoleCreate, RoleUpdate +from src.db.roles import Role, RoleCreate, RoleRead, RoleUpdate from fastapi import HTTPException, Request from datetime import datetime @@ -32,6 +32,8 @@ async def create_role( db_session.commit() db_session.refresh(role) + role = RoleRead(**role.dict()) + return role @@ -52,6 +54,8 @@ async def read_role( # RBAC check await rbac_check(request, current_user, "read", role.role_uuid, db_session) + role = RoleRead(**role.dict()) + return role @@ -90,6 +94,8 @@ async def update_role( db_session.commit() db_session.refresh(role) + role = RoleRead(**role.dict()) + return role