Добавление рабочих аватарок и фонов профиля
This commit is contained in:
parent
ca5ddec512
commit
f200ec0bef
@ -1,5 +1,4 @@
|
|||||||
import time
|
import time
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from .api_media_utils import *
|
from .api_media_utils import *
|
||||||
from .api_utils import *
|
from .api_utils import *
|
||||||
from .models import *
|
from .models import *
|
||||||
@ -56,7 +55,7 @@ class ApiAccount:
|
|||||||
if hasattr(user, 'accountavatar'):
|
if hasattr(user, 'accountavatar'):
|
||||||
obj["avatar"] = user.accountavatar.photo.id if user.accountavatar.photo is not None else None
|
obj["avatar"] = user.accountavatar.photo.id if user.accountavatar.photo is not None else None
|
||||||
obj["profile_background"] = \
|
obj["profile_background"] = \
|
||||||
user.accountavatar.profile_background.id if user.accountavatar.photo is not None else None
|
user.accountavatar.profile_background.id if user.accountavatar.profile_background is not None else None
|
||||||
else:
|
else:
|
||||||
obj["avatar"] = None
|
obj["avatar"] = None
|
||||||
obj["profile_background"] = None
|
obj["profile_background"] = None
|
||||||
@ -102,6 +101,7 @@ class ApiAccount:
|
|||||||
user = await Account.objects.acreate(phone=phone, password=password, role=role)
|
user = await Account.objects.acreate(phone=phone, password=password, role=role)
|
||||||
if role == Account.ROLE_EXECUTOR:
|
if role == Account.ROLE_EXECUTOR:
|
||||||
await ExecutorAccount.objects.acreate(account=user)
|
await ExecutorAccount.objects.acreate(account=user)
|
||||||
|
await AccountAvatar.objects.acreate(account=user, photo=None, profile_background=None)
|
||||||
|
|
||||||
# удаляем код, типа завершение транзакции
|
# удаляем код, типа завершение транзакции
|
||||||
PhoneVerificationService.check_code(phone, code, auto_pop=True)
|
PhoneVerificationService.check_code(phone, code, auto_pop=True)
|
||||||
@ -185,10 +185,14 @@ class ApiAccount:
|
|||||||
description="ИНН исполнителя (только для роли исполнитель): "
|
description="ИНН исполнителя (только для роли исполнитель): "
|
||||||
"12 цифр если исполнитель - физ.лицо и 10 цифр если это юр. лицо"),
|
"12 цифр если исполнитель - физ.лицо и 10 цифр если это юр. лицо"),
|
||||||
ApiParamEnum(name="city", description="Город, в котором находится ползователь: {choices}",
|
ApiParamEnum(name="city", description="Город, в котором находится ползователь: {choices}",
|
||||||
required=False, choices=CITIES_CHOICES)
|
required=False, choices=CITIES_CHOICES),
|
||||||
|
ApiParamInt(name="photo", required=False, default=None,
|
||||||
|
description="ID медиа, которое будет использоваться в качестве фото профиля"),
|
||||||
|
ApiParamInt(name="profile_background", required=False, default=None,
|
||||||
|
description="ID медиа, которое будет использоваться в качестве банера профиля")
|
||||||
],
|
],
|
||||||
returns="Вернет основную информацию о пользователе, иначе ошибки")
|
returns="Вернет основную информацию о пользователе, иначе ошибки")
|
||||||
async def edit(access_token, name, surname, about, executor_type, executor_inn, city):
|
async def edit(access_token, name, surname, about, executor_type, executor_inn, city, photo, profile_background):
|
||||||
user = access_token.user
|
user = access_token.user
|
||||||
executor_need_save, need_save = False, False
|
executor_need_save, need_save = False, False
|
||||||
|
|
||||||
@ -208,6 +212,32 @@ class ApiAccount:
|
|||||||
user.city = city
|
user.city = city
|
||||||
need_save = True
|
need_save = True
|
||||||
|
|
||||||
|
if photo is not None:
|
||||||
|
p = await Media.objects.filter(pk=photo).select_related('owner').afirst()
|
||||||
|
if p is None:
|
||||||
|
raise Exception(API_ERROR_NOT_FOUND, 'field "photo" not found')
|
||||||
|
|
||||||
|
if p.owner.id == user.id and (p.extension == 'jpeg' or p.extension == 'png'):
|
||||||
|
if not hasattr(user, 'accountavatar'):
|
||||||
|
user.accountavatar = await AccountAvatar.objects.acreate(account=user)
|
||||||
|
user.accountavatar.photo = p
|
||||||
|
need_save = True
|
||||||
|
else:
|
||||||
|
raise Exception(API_ERROR_NOT_FOUND, 'field "photo" not correct')
|
||||||
|
|
||||||
|
if profile_background is not None:
|
||||||
|
p = await Media.objects.filter(pk=profile_background).select_related('owner').afirst()
|
||||||
|
if p is None:
|
||||||
|
raise Exception(API_ERROR_NOT_FOUND, 'field "profile_background" not found')
|
||||||
|
|
||||||
|
if p.owner.id == user.id and p.extension == 'jpeg':
|
||||||
|
if not hasattr(user, 'accountavatar'):
|
||||||
|
user.accountavatar = await AccountAvatar.objects.acreate(account=user)
|
||||||
|
user.accountavatar.profile_background = p
|
||||||
|
need_save = True
|
||||||
|
else:
|
||||||
|
raise Exception(API_ERROR_NOT_FOUND, 'field "profile_background" not correct')
|
||||||
|
|
||||||
if user.role == Account.ROLE_EXECUTOR:
|
if user.role == Account.ROLE_EXECUTOR:
|
||||||
print("Executor account detected")
|
print("Executor account detected")
|
||||||
if executor_type is not None:
|
if executor_type is not None:
|
||||||
|
@ -120,7 +120,7 @@ class Media(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class AccountAvatar(models.Model):
|
class AccountAvatar(models.Model):
|
||||||
account = models.OneToOneField(Account, on_delete=models.CASCADE, related_name="account", verbose_name="Аккаунт")
|
account = models.OneToOneField(Account, on_delete=models.CASCADE, verbose_name="Аккаунт")
|
||||||
photo = models.ForeignKey(Media, on_delete=models.SET_NULL, null=True,
|
photo = models.ForeignKey(Media, on_delete=models.SET_NULL, null=True,
|
||||||
related_name="photo", verbose_name="Аватар")
|
related_name="photo", verbose_name="Аватар")
|
||||||
profile_background = models.ForeignKey(Media, on_delete=models.SET_NULL, null=True, default=None,
|
profile_background = models.ForeignKey(Media, on_delete=models.SET_NULL, null=True, default=None,
|
||||||
@ -192,8 +192,14 @@ class AccessToken(models.Model):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def get_by_token(token: str):
|
async def get_by_token(token: str):
|
||||||
t = await AccessToken.objects.filter(access_token=token).select_related('user',
|
related = [
|
||||||
'user__executoraccount').afirst()
|
'user',
|
||||||
|
'user__accountavatar',
|
||||||
|
'user__accountavatar__profile_background',
|
||||||
|
'user__accountavatar__photo',
|
||||||
|
'user__executoraccount'
|
||||||
|
]
|
||||||
|
t = await AccessToken.objects.filter(access_token=token).select_related(*related).afirst()
|
||||||
if t is None:
|
if t is None:
|
||||||
raise Exception(API_ERROR_INVALID_TOKEN)
|
raise Exception(API_ERROR_INVALID_TOKEN)
|
||||||
return t
|
return t
|
||||||
|
Reference in New Issue
Block a user