login route
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
from typing import Any, Optional
|
||||
from rest_framework import serializers
|
||||
from django.conf import settings
|
||||
from api.types import User
|
||||
|
||||
class UserResponseSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(read_only=True)
|
||||
email = serializers.EmailField(read_only=True)
|
||||
account_type = serializers.CharField(
|
||||
source='userprofile.account_type',
|
||||
read_only=True
|
||||
)
|
||||
name = serializers.CharField(source='first_name', read_only=True)
|
||||
surname = serializers.CharField(source='last_name', read_only=True)
|
||||
imageURL = serializers.SerializerMethodField()
|
||||
uuid = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
ref_name = "UserResponse" # для OpenAPI
|
||||
|
||||
def get_uuid(self, obj: User) -> Optional[str]:
|
||||
"""Получает короткий UUID (первые 6 символов) из профиля пользователя"""
|
||||
return obj.userprofile.short_uuid if hasattr(obj, 'userprofile') else None
|
||||
|
||||
def get_imageURL(self, obj: User) -> Optional[str]:
|
||||
"""Получает полный URL для изображения профиля пользователя"""
|
||||
try:
|
||||
if not hasattr(obj, 'userprofile') or not obj.userprofile.imageURL:
|
||||
return None
|
||||
|
||||
relative_url = obj.userprofile.imageURL.lstrip('/')
|
||||
base_url = settings.BASE_URL.rstrip('/')
|
||||
return f"{base_url}/{relative_url}"
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def to_representation(self, instance: User) -> dict[str, Any]:
|
||||
"""Переопределяется для добавления проверки типа для вывода"""
|
||||
data = super().to_representation(instance)
|
||||
return {
|
||||
'id': data['id'], # int
|
||||
'email': data['email'], # str
|
||||
'account_type': data['account_type'], # AccountTypeLiteral
|
||||
'name': data['name'], # str
|
||||
'surname': data['surname'], # str
|
||||
'imageURL': data['imageURL'], # Optional[str]
|
||||
'uuid': data['uuid'], # Optional[str]
|
||||
}
|
||||
|
||||
|
||||
class LoginRequestSerializer(serializers.Serializer):
|
||||
"""Сериализатор для запроса авторизации"""
|
||||
login = serializers.CharField(help_text="Логин пользователя")
|
||||
password = serializers.CharField(help_text="Пароль пользователя", write_only=True)
|
||||
|
||||
|
||||
class LoginResponseSerializer(serializers.Serializer):
|
||||
"""Сериализатор для ответа при успешной авторизации"""
|
||||
message = serializers.CharField()
|
||||
access = serializers.CharField()
|
||||
refresh = serializers.CharField()
|
||||
user = UserResponseSerializer()
|
||||
Reference in New Issue
Block a user