From b8478e4c260ae6f5ded42e91ea08ac3d146e0c22 Mon Sep 17 00:00:00 2001 From: VladislavOstapov Date: Tue, 28 Mar 2023 16:00:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=8F=D0=B2=D0=B8=D0=BB=D1=81?= =?UTF-8?q?=D1=8F=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20media.list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/api_methods.py | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/api/api_methods.py b/api/api_methods.py index 5d9eb78..073a8e8 100755 --- a/api/api_methods.py +++ b/api/api_methods.py @@ -714,14 +714,16 @@ class ApiMedia: params=[ ApiRequestParam(), ApiParamAccessToken(), - ApiParamInt(name="m_id", description="ID медиа", + ApiParamInt(name="media_id", description="ID медиа", value_min=0, value_max=1000000000), ], returns="медиа, в противном случае ошибку") - async def get(request, access_token, m_id): + async def get(request, access_token, media_id): if request.method != "GET": return make_error_object(Exception(API_ERROR_INVALID_REQUEST, "method must be executed http GET method")) - m = await Media.objects.filter(owner=access_token.user, pk=m_id).afirst() + m = await Media.objects.filter(Q(owner=access_token.user) | + Q(owner__account__photo_id=media_id) | + Q(owner__account__profile_background_id=media_id)).filter(pk=media_id).afirst() if m is not None: try: @@ -733,6 +735,30 @@ class ApiMedia: traceback.print_exc() return make_error_object(Exception(API_ERROR_NOT_FOUND, "object in storage not found")) + @staticmethod + @api_method("media.list", + doc="Получение списка всех загруженных медиа для текущего пользователя", + params=[ + ApiParamAccessToken(), + ApiParamInt(name="count", description="Количество объектов, максимум 100, по умолчанию 25", + value_min=1, value_max=100, default=25, required=False), + ApiParamInt(name="offset", description="Смещение списка относительно начала", + value_min=0, value_max=100000, default=0, required=False), + ], returns="Список с объектами media.") + async def get_list(access_token, count, offset): + ms = [item async for item in + Media.objects.filter(owner=access_token.user, ).order_by('upload_datetime')[offset:offset + count] + ] + + res = [{ + 'id': m.id, + 'name': m.original_name, + 'upload_time': int(time.mktime(m.upload_datetime.timetuple())), + 'extension': m.extension + } for m in ms] + + return api_make_response(res) + class DatabaseApi: # TODO переместить сюда форму заказа, список городов