вот еще интересное заметил.
|
async def get_permissions(self) -> list[PermissionInDb]: |
|
logger.info("Start get_permissions") |
|
data = await self.pg.execute(select(Permission)) |
|
return [ |
|
PermissionInDb(name=it.name, description=it.description) |
|
for it in data.scalars() |
|
] |
А потом уже в эндпоинте опять
|
@router.get( |
|
'/list', |
|
status_code=HTTPStatus.OK, |
|
tags=['permissions'], |
|
description='List Permissions', |
|
summary="Список разрешений", |
|
) |
|
async def get_permission( |
|
service: PermissionService = Depends(permission_services), |
|
) -> list[PermissionInDb]: |
|
result = await service.get_permissions() |
|
if not result: |
|
raise HTTPException( |
|
status_code=HTTPStatus.BAD_REQUEST, detail='Permission not exist' |
|
) |
|
|
|
return [PermissionInDb(name=it.name, description=it.description) for it in result] |
У вас тут два раза делается вот такая штука (и исключение там вообще лишнее Permission not exist, вернуть пустой список - не криминал, чего сразу ругаться то?):
[PermissionInDb(name=it.name, description=it.description) for it in result]
А можно вообще упростить до:
@router.get(
'/list',
response_model=list[PermissionInDb],
status_code=HTTPStatus.OK,
tags=['permissions'],
description='List Permissions',
summary="Список разрешений",
)
async def get_permission(
service: PermissionService = Depends(permission_services),
) -> list[PermissionInDb]:
return await service.get_permissions()
А в auth-service/app/src/services/permission.py:
async def get_permissions(self) -> list[Permission]:
logger.info("Start get_permissions")
data = await self.pg.execute(select(Permission))
return data.scalars()
А всеми преобразованиями list[Permission] => list[PermissionInDb] займется FastAPI, при этом будет ориентироваться на поле response_model в эндпоинте, а если его нет то на тип возвращаемого значения -> list[PermissionInDb]
и все это благодаря orm_mode = True
, который у вас установлен в модели PermissionInDb