Skip to content

Commit

Permalink
check commit
Browse files Browse the repository at this point in the history
  • Loading branch information
iliak committed Dec 2, 2023
1 parent 9945e46 commit 1a6c5c2
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 19 deletions.
16 changes: 10 additions & 6 deletions userdata_api/routes/category.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,17 @@
category = APIRouter(prefix="/category", tags=["Category"])


@category.post("", response_model=CategoryGet)
@category.post("", response_model=CategoryGet,
description='Создать категорию пользовательских данных. Получить категорию можно будет со скоупами,'
' имена которых в category_inp.scopes.\n\n' # Используем символ перевода строки
'Ручка обновит документацию')

async def create_category(
request: Request,
category_inp: CategoryPost,
_: dict[str, str] = Depends(UnionAuth(scopes=["userdata.category.create"], allow_none=False, auto_error=True)),
) -> CategoryGet:
"""
Hello_world!
Создать категорию пользовательских данных. Получить категорию можно будет со скоупами, имена которых в category_inp.scopes
Ручка обновит документацию
:param request: https://fastapi.tiangolo.com/advanced/using-request-directly/
Expand All @@ -35,7 +38,7 @@ async def create_category(
return CategoryGet.model_validate(category)


@category.get("/{id}", response_model=CategoryGet)
@category.get("/{id}", response_model=CategoryGet, description='Получить категорию')
async def get_category(id: int) -> CategoryGet:
"""
Получить категорию
Expand All @@ -47,7 +50,8 @@ async def get_category(id: int) -> CategoryGet:
return CategoryGet.model_validate(category)


@category.get("", response_model=list[CategoryGet], response_model_exclude_none=True)
@category.get("", response_model=list[CategoryGet], response_model_exclude_none=True,
description='Получить все категории')
async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> list[CategoryGet]:
result = []
for category in Category.query(session=db.session).all():
Expand All @@ -69,7 +73,7 @@ async def get_categories(query: list[Literal["param"]] = Query(default=[])) -> l
return type_adapter.validate_python(result)


@category.patch("/{id}", response_model=CategoryGet)
@category.patch("/{id}", response_model=CategoryGet, description='Обновить категорию')
async def patch_category(
request: Request,
id: int,
Expand All @@ -88,7 +92,7 @@ async def patch_category(
return CategoryGet.model_validate(Category.update(id, session=db.session, **category_inp.dict(exclude_unset=True)))


@category.delete("/{id}", response_model=StatusResponseModel)
@category.delete("/{id}", response_model=StatusResponseModel, description='Удалить категорию')
async def delete_category(
request: Request,
id: int,
Expand Down
12 changes: 7 additions & 5 deletions userdata_api/routes/param.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
param = APIRouter(prefix="/category/{category_id}/param", tags=["Param"])


@param.post("", response_model=ParamGet)
@param.post("", response_model=ParamGet,
description='Создать поле внутри категории. '
'Ответ на пользовательские данные будет такой {..., category: {...,param: '', ...}}')
async def create_param(
request: Request,
category_id: int,
Expand All @@ -35,7 +37,7 @@ async def create_param(
return ParamGet.model_validate(Param.create(session=db.session, **param_inp.dict(), category_id=category_id))


@param.get("/{id}", response_model=ParamGet)
@param.get("/{id}", response_model=ParamGet, description='Получить параметр по айди')
async def get_param(id: int, category_id: int) -> ParamGet:
"""
Получить параметр по айди
Expand All @@ -49,7 +51,7 @@ async def get_param(id: int, category_id: int) -> ParamGet:
return ParamGet.model_validate(res)


@param.get("", response_model=list[ParamGet])
@param.get("", response_model=list[ParamGet], description='Получить все параметры категории')
async def get_params(category_id: int) -> list[ParamGet]:
"""
Получить все параметры категории
Expand All @@ -60,7 +62,7 @@ async def get_params(category_id: int) -> list[ParamGet]:
return type_adapter.validate_python(Param.query(session=db.session).filter(Param.category_id == category_id).all())


@param.patch("/{id}", response_model=ParamGet)
@param.patch("/{id}", response_model=ParamGet, description='Обновить параметр внутри категории')
async def patch_param(
request: Request,
id: int,
Expand All @@ -86,7 +88,7 @@ async def patch_param(
return ParamGet.model_validate(Param.update(id, session=db.session, **param_inp.dict(exclude_unset=True)))


@param.delete("/{id}", response_model=StatusResponseModel)
@param.delete("/{id}", response_model=StatusResponseModel, description='Удалить параметр внутри категории')
async def delete_param(
request: Request,
id: int,
Expand Down
10 changes: 5 additions & 5 deletions userdata_api/routes/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
source = APIRouter(prefix="/source", tags=["Source"])


@source.post("", response_model=SourceGet)
@source.post("", response_model=SourceGet, description="Создать источник данных")
async def create_source(
request: Request,
source_inp: SourcePost,
Expand All @@ -33,7 +33,7 @@ async def create_source(
return SourceGet.model_validate(Source.create(session=db.session, **source_inp.dict()))


@source.get("/{id}", response_model=SourceGet)
@source.get("/{id}", response_model=SourceGet, description="Получить источник данных")
async def get_source(id: int) -> SourceGet:
"""
Получить источник данных
Expand All @@ -43,7 +43,7 @@ async def get_source(id: int) -> SourceGet:
return SourceGet.model_validate(Source.get(id, session=db.session))


@source.get("", response_model=list[SourceGet])
@source.get("", response_model=list[SourceGet], description='Получить все источники данных')
async def get_sources() -> list[SourceGet]:
"""
Получить все источники данных
Expand All @@ -53,7 +53,7 @@ async def get_sources() -> list[SourceGet]:
return type_adapter.validate_python(Source.query(session=db.session).all())


@source.patch("/{id}", response_model=SourceGet)
@source.patch("/{id}", response_model=SourceGet, description='Обновить источник данных')
async def patch_source(
request: Request,
id: int,
Expand All @@ -71,7 +71,7 @@ async def patch_source(
return SourceGet.model_validate(Source.update(id, session=db.session, **source_inp.dict(exclude_unset=True)))


@source.delete("/{id}", response_model=StatusResponseModel)
@source.delete("/{id}", response_model=StatusResponseModel, description='Удалить источник данных')
async def delete_source(
request: Request,
id: int,
Expand Down
25 changes: 22 additions & 3 deletions userdata_api/routes/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
user = APIRouter(prefix="/user", tags=["User"])


@user.get("/{id}", response_model=UserInfoGet)
@user.get("/{id}", response_model=UserInfoGet, description='Получить информацию о пользователе')
async def get_user_info(
id: int, user: dict[str, Any] = Depends(UnionAuth(scopes=[], allow_none=False, auto_error=True))
) -> UserInfoGet:
"""
Получить информацию о польщователе
Получить информацию о пользователе
:param id: Айди овнера информации(пользователя)
:param user: Аутентфикация
:return: Словарь, ключи - категории на которые хватило прав(овнеру не нужны права, он получает всё).
Expand All @@ -32,7 +32,26 @@ async def get_user_info(
return UserInfoGet.model_validate(await get(id, user))


@user.post("/{id}", response_model=StatusResponseModel)
@user.post("/{id}", response_model=StatusResponseModel,
description= 'Обновить информацию о пользователе.\n\n'
'Объект - пользователь, информацию которого обновляют\n\n'
'Субъект - пользователь, который обновляет - источник\n\n'
'\n\n'
'Если не указать параметр внутри категории, то ничего не обновится, если указать что-то,'
'то либо создастся новая запись(в случае, если она отсутствовала у данного источника),'
' либо отредактируется'
'старая. Если в значении параметра указан None,'
' то соответствующая информациия удаляется из данного источника'
'\n\n'
'Обновлять через эту ручку можно только от имени источников admin и user.\n\n'
'Чтобы обновить от имени админиа, надо иметь скоуп `userdata.info.admin`\n\n'
'Чтобы обновить неизменяемую информацию надо обладать скоупом `userdata.info.update`\n\n'
'Для обновления своей информации(источник `user`) не нужны скоупы на обновление '
'соответствующих категорий\n\n'
'Для обновления чужой информации от имени админа(источник `admin`)'
'нужны скоупы на обновление всех указанных в теле запроса категорий'
' пользовательских данных данных'
)
async def update_user(
new_info: UserInfoUpdate,
id: int,
Expand Down

0 comments on commit 1a6c5c2

Please sign in to comment.