feat: added endpoints: auth, pofile, account, keyring #5
@ -9,6 +9,7 @@ from fastapi import (
|
||||
status,
|
||||
)
|
||||
|
||||
from fastapi import FastAPI
|
||||
|
||||
from fastapi_jwt_auth import AuthJWT
|
||||
|
||||
@ -23,7 +24,8 @@ from api.schemas.endpoints.account import UserUpdate
|
||||
|
||||
from api.services.access_token_validadtion import AccessTokenValidadtion
|
||||
from api.services.user_role_validation import db_user_role_validation
|
||||
from api.services.update_data_validation import put_user_data_validator
|
||||
from api.services.update_data_validation import put_user_data_changes
|
||||
|
||||
|
||||
api_router = APIRouter(
|
||||
prefix="/account",
|
||||
@ -96,12 +98,10 @@ async def put_account(
|
||||
detail="Account not found")
|
||||
|
||||
|
||||
update_values = put_user_data_validator(user_update,user)
|
||||
update_values = put_user_data_changes(user_update,user)
|
||||
|
||||
if update_values is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail="The provided data already exists in the database")
|
||||
return user
|
||||
|
||||
await put_user_id(connection, update_values, user)
|
||||
ivan.dev marked this conversation as resolved
|
||||
|
||||
@ -130,12 +130,11 @@ async def delete_account(
|
||||
|
||||
user_update = UserUpdate(status=Status.DELETED.value)
|
||||
|
||||
update_values = put_user_id_validator(user_update,user)
|
||||
update_values = put_user_data_changes(user_update,user)
|
||||
ivan.dev marked this conversation as resolved
Outdated
vlad.dev
commented
`put_user_id_validator` выдает у меня ошибку, что имя не определено
|
||||
|
||||
if update_values is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail="The provided data already exists in the database")
|
||||
return user
|
||||
|
||||
|
||||
await put_user_id(connection, update_values, user)
|
||||
|
||||
|
@ -22,9 +22,11 @@ from api.db.logic.keyring import get_key_id,post_add_key,put_key_id
|
||||
from api.schemas.account.account import Role,Status
|
||||
from api.schemas.endpoints.account_keyring import AccountKeyringUpdate
|
||||
|
||||
from api.schemas.account.account_keyring import AccountKeyring
|
||||
|
||||
from api.services.access_token_validadtion import AccessTokenValidadtion
|
||||
from api.services.user_role_validation import db_user_role_validation
|
||||
from api.services.update_data_validation import put_key_data_validator
|
||||
from api.services.update_data_validation import put_key_data_changes
|
||||
|
||||
|
||||
api_router = APIRouter(
|
||||
@ -100,12 +102,11 @@ async def put_keyring(
|
||||
detail="keyring not found")
|
||||
|
||||
|
||||
update_values = put_key_data_validator(keyring_update,keyring)
|
||||
update_values = put_key_data_changes(keyring_update,keyring)
|
||||
ivan.dev marked this conversation as resolved
Outdated
cyrussmeat
commented
А это разве ошибка, если изменений не было, но попытались сохранить данные? А это разве ошибка, если изменений не было, но попытались сохранить данные?
Оно должно проходить без лишнего крика.
|
||||
|
||||
if update_values is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail="The provided data already exists in the database")
|
||||
return keyring
|
||||
|
||||
|
||||
await put_key_id(connection, update_values, keyring)
|
||||
|
||||
@ -135,12 +136,10 @@ async def delete_keyring(
|
||||
|
||||
keyring_update = AccountKeyringUpdate(status=Status.DELETED.value)
|
||||
|
||||
update_values = put_key_validator(keyring_update,keyring)
|
||||
update_values = put_key_data_changes(keyring_update,keyring)
|
||||
|
||||
if update_values is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail="The provided data already exists in the database")
|
||||
return keyring
|
||||
|
||||
await put_key_id(connection, update_values, keyring)
|
||||
|
||||
|
@ -15,7 +15,7 @@ from sqlalchemy.ext.asyncio import AsyncConnection
|
||||
|
||||
from api.db.connection.session import get_connection_dep
|
||||
from api.db.logic.account import get_user_id, put_user_id,get_user_login
|
||||
from api.services.update_data_validation import put_user_data_validator
|
||||
from api.services.update_data_validation import put_user_data_changes
|
||||
|
||||
from api.schemas.endpoints.account import UserUpdate
|
||||
|
||||
@ -76,12 +76,10 @@ async def put_pofile(
|
||||
detail="Account not found")
|
||||
|
||||
|
||||
update_values = put_user_data_validator(user_updata,user)
|
||||
update_values = put_user_data_changes(user_updata,user)
|
||||
|
||||
if update_values is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail="The provided data already exists in the database")
|
||||
return user
|
||||
|
||||
await put_user_id(connection, update_values, user)
|
||||
|
||||
|
@ -3,7 +3,7 @@ from typing import Optional
|
||||
from api.schemas.endpoints.account import UserUpdate, Role, Status
|
||||
from api.schemas.endpoints.account_keyring import AccountKeyringUpdate, StatusKey, TypeKey
|
||||
|
||||
def put_user_data_validator(update_data: UserUpdate, user) -> Optional[dict]:
|
||||
def put_user_data_changes(update_data: UserUpdate, user) -> Optional[dict]:
|
||||
ivan.dev marked this conversation as resolved
Outdated
cyrussmeat
commented
По названию оно должно заниматься валидацией через DTO/модель, т.е. проверять поля на их соответствие типам и размерностям. Тут скорее просится название put_user_data_changes() как вариант оптимизации избыточности вставки данных, но не проверки валидности. Это не отменяет необходимости валидации данных. Либо Pydantic в модели, либо DTO с валидацией - ваш выбор. По названию оно должно заниматься валидацией через DTO/модель, т.е. проверять поля на их соответствие типам и размерностям.
Тут скорее просится название put_user_data_changes() как вариант оптимизации избыточности вставки данных, но не проверки валидности.
Это не отменяет необходимости валидации данных. Либо Pydantic в модели, либо DTO с валидацией - ваш выбор.
ivan.dev
commented
Функция сравнивает то что пришло с таблицей Pydantic AccountKeyringUpdate(api\schemas\endpoints\account_keyring) где все точно такие же поля только все необязательные, это в данном случае и выполняет функцию валидации. Это не верное решение? Функция сравнивает то что пришло с таблицей Pydantic AccountKeyringUpdate(api\schemas\endpoints\account_keyring) где все точно такие же поля только все необязательные, это в данном случае и выполняет функцию валидации. Это не верное решение?
cyrussmeat
commented
У Pydantic же есть model_validate() и @validator() директива, в которой реализуется не только проверка размерности по типу данных, но и всякие дополнительные нюансы, к примеру длина логина, его состав (e-mail) и прочие дополнительные ограничения. В классике там оно приходит уже провалидированным в методе: У Pydantic же есть model_validate() и @validator() директива, в которой реализуется не только проверка размерности по типу данных, но и всякие дополнительные нюансы, к примеру длина логина, его состав (e-mail) и прочие дополнительные ограничения.
В классике там оно приходит уже провалидированным в методе:
https://stackoverflow.com/questions/78157897/sqlmodel-and-pydantic-data-validation
|
||||
"""
|
||||
Сравнивает данные для обновления с текущими значениями пользователя.
|
||||
Возвращает:
|
||||
@ -36,7 +36,7 @@ def put_user_data_validator(update_data: UserUpdate, user) -> Optional[dict]:
|
||||
|
||||
return changes if changes else None
|
||||
|
||||
def put_key_data_validator(update_data: AccountKeyringUpdate, key) -> Optional[dict]:
|
||||
def put_key_data_changes(update_data: AccountKeyringUpdate, key) -> Optional[dict]:
|
||||
"""
|
||||
Сравнивает данные для обновления с текущими значениями пользователя.
|
||||
Возвращает:
|
||||
|
@ -40,7 +40,7 @@ async def init():
|
||||
create_key_query = account_keyring_table.insert().values(
|
||||
owner_id=user_id,
|
||||
key_type=KeyType.PASSWORD,
|
||||
key_id=KeyIdGenerator()
|
||||
key_id=KeyIdGenerator(),
|
||||
ivan.dev marked this conversation as resolved
Outdated
vlad.dev
commented
Тут потерял запятую после Тут потерял запятую после `key_id=KeyIdGenerator()`
|
||||
key_value=hashed_password,
|
||||
status=KeyStatus.ACTIVE,
|
||||
)
|
||||
|
А вот где неиспользуемые переменные, можешь объяснить зачем они, я просто не особо понял?
Вот к примеру
user_update_data
иauthorize_user
, это какой-то задел на будущее?Да, если логика поменяется.