From 2131ffd9206f2e3a75120bd0552b7c6c8764dee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Mon, 1 Dec 2025 15:21:36 +0300 Subject: [PATCH] =?UTF-8?q?debug:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D1=81=D1=81?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B0=D0=B2=D0=B0=D1=82=D0=B0=D1=80=D0=B0=20=D0=B2=20?= =?UTF-8?q?API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/api/v1/employees/views.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/backend/api/v1/employees/views.py b/backend/api/v1/employees/views.py index 1b26958e..f440965a 100644 --- a/backend/api/v1/employees/views.py +++ b/backend/api/v1/employees/views.py @@ -1674,6 +1674,13 @@ class EmployeeViewSet(viewsets.ModelViewSet): ser = self.get_serializer(instance, data=request.data, partial=True) ser.is_valid(raise_exception=True) vd = dict(ser.validated_data) + + logger.info(f"[ME PATCH] validated_data keys: {list(vd.keys())}") + if 'avatar' in vd: + logger.info(f"[ME PATCH] avatar in validated_data: type={type(vd['avatar'])}, hasattr read={hasattr(vd.get('avatar'), 'read')}") + avatar_obj = vd.get('avatar') + if avatar_obj: + logger.info(f"[ME PATCH] avatar object: name={getattr(avatar_obj, 'name', None)}, size={getattr(avatar_obj, 'size', None)}") # Проверяем изменение email new_email = vd.get("email") @@ -1717,11 +1724,13 @@ class EmployeeViewSet(viewsets.ModelViewSet): # Проверяем аватар в validated_data (base64) или в FILES (FormData) avatar_file = ser.validated_data.get("avatar") or request.FILES.get("avatar") + logger.info(f"[ME PATCH] avatar_file after check: {avatar_file}, type: {type(avatar_file) if avatar_file else None}") if avatar_file and hasattr(avatar_file, "read"): try: svc_changes["avatar_bytes"] = avatar_file.read() - except Exception: - pass + logger.info(f"[ME PATCH] avatar_bytes read, length: {len(svc_changes['avatar_bytes'])}") + except Exception as e: + logger.error(f"[ME PATCH] Error reading avatar: {e}") if ldap_enabled and (svc_changes or move_to_department_dn or group_cns is not None): # Режим с LDAP: обновляем через DirectoryService @@ -1740,18 +1749,24 @@ class EmployeeViewSet(viewsets.ModelViewSet): ) elif not ldap_enabled and svc_changes: # Режим без LDAP: обновляем напрямую в БД + logger.info(f"[ME PATCH] LDAP disabled, updating DB directly with: {list(svc_changes.keys())}") for k, v in svc_changes.items(): if k != "position" and k != "avatar_bytes": setattr(instance, k, v) + logger.info(f"[ME PATCH] Set {k} = {v}") elif k == "position": instance.position_id = v + logger.info(f"[ME PATCH] Set position_id = {v}") elif k == "avatar_bytes" and v: + filename = f"avatar_{instance.id}.jpg" instance.avatar.save( - f"avatar_{instance.id}.jpg", + filename, ContentFile(v), save=False, ) + logger.info(f"[ME PATCH] Avatar saved as {filename}, path: {instance.avatar.name if instance.avatar else 'None'}") instance.save() + logger.info(f"[ME PATCH] Instance saved, avatar path in DB: {instance.avatar.name if instance.avatar else 'None'}") # DB-only if vd: @@ -1762,6 +1777,10 @@ class EmployeeViewSet(viewsets.ModelViewSet): data = ser_db.data else: data = self.get_serializer(instance).data + + logger.info(f"[ME PATCH] Final response data keys: {list(data.keys())}") + if 'avatar' in data: + logger.info(f"[ME PATCH] avatar in response: {data['avatar'][:100] if data['avatar'] else None}...") # Сброс email_verified при изменении email if email_changed: