71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
from enum import Enum
|
||
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]:
|
||
"""
|
||
Сравнивает данные для обновления с текущими значениями пользователя.
|
||
Возвращает:
|
||
- None, если нет изменений
|
||
- Словарь {поле: новое_значение} для измененных полей
|
||
"""
|
||
update_values = {}
|
||
changes = {}
|
||
|
||
for field, value in update_data.model_dump(exclude_unset=True).items():
|
||
if value is None:
|
||
continue
|
||
|
||
if isinstance(value, (Role, Status)):
|
||
update_values[field] = value.value
|
||
else:
|
||
update_values[field] = value
|
||
|
||
for field, new_value in update_values.items():
|
||
if not hasattr(user, field):
|
||
continue
|
||
|
||
current_value = getattr(user, field)
|
||
|
||
if isinstance(current_value, Enum):
|
||
current_value = current_value.value
|
||
|
||
if current_value != new_value:
|
||
changes[field] = new_value
|
||
|
||
return changes if changes else None
|
||
|
||
def put_key_data_validator(update_data: AccountKeyringUpdate, key) -> Optional[dict]:
|
||
"""
|
||
Сравнивает данные для обновления с текущими значениями пользователя.
|
||
Возвращает:
|
||
- None, если нет изменений
|
||
- Словарь {поле: новое_значение} для измененных полей
|
||
"""
|
||
update_values = {}
|
||
changes = {}
|
||
|
||
for field, value in update_data.model_dump(exclude_unset=True).items():
|
||
if value is None:
|
||
continue
|
||
|
||
if isinstance(value, (TypeKey, StatusKey)):
|
||
update_values[field] = value.value
|
||
else:
|
||
update_values[field] = value
|
||
|
||
for field, new_value in update_values.items():
|
||
if not hasattr(key, field):
|
||
continue
|
||
|
||
current_value = getattr(key, field)
|
||
|
||
if isinstance(current_value, Enum):
|
||
current_value = current_value.value
|
||
|
||
if current_value != new_value:
|
||
changes[field] = new_value
|
||
|
||
return changes if changes else None
|